MyBatis
[MyBatis] java.lang.NumberFormatException: For input string
과일가게 개발자
2017. 9. 4. 10:52
반응형
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>