반응형
MyBatis 쿼리를 작성하던중 IF구문이 예상과는 다르게 오류를 발생시키고 있었다.
오류는 NumberFormatException 관련 오류였는데 무언가 이상하다.
아래와 같이 분명히 문자열끼리의 비교인데 NumberFormatException 이 발생하는것이 아닌가?
SELECT NAME , AGE FROM MEMBER WHERE AGE = 20 <if test="spType == 'A'"> AND MEMBER_TP = 'ALL' </if>
결론부터 얘기하자면 MyBatis에서 IF문을 사용할때 비교하는 문자열이 1글자 일때 해당 문자열을 char 형으로 인식해서 발생하는 오류이다.
즉 2글자 부터는 String으로 인식하여 오류가 나지 않는다.
ONGL의 특성에 관련된 문제라고 하는데 여기까지는 잘 모르겠으니 넘어가고, 그렇다면 해결책에 대해 알아보자.
1. <if test='spType == "A"'></if>
- 비교하고자 하는 문자열을 쌍따옴표로 감싼다.
2. <if test="spType == "A""></if>
- 쌍따옴표를 HTML 코드로 작성.
3. <if test="spType == 'A'.toString()"></if>
- 문자열을 toString()을 이용하여 String으로 변환
나 같은경우 가독성이 좋아 3번과 같이 toString() 함수를 사용하는것을 선호하는 편이다.
SELECT NAME , AGE FROM MEMBER WHERE AGE = 20 <if test="spType == 'A'.toString()"> AND MEMBER_TP = 'ALL' </if>
'MyBatis' 카테고리의 다른 글
MyBatis Mapper if 구문에서 메서드 호출하기 (0) | 2020.07.20 |
---|---|
[MyBatis] 오라클 java.math.BigDecimal Exception (1) | 2017.10.02 |
MyBatis foreach를 이용한 배열 파라미터 삽입하기 (3) | 2015.12.23 |
MyBatis Insert 자동 증가값 가져오기 (0) | 2014.10.21 |
MyBatis mapper 파일에 include 사용하기 (0) | 2014.09.03 |