본문 바로가기

MyBatis

[MyBatis] java.lang.NumberFormatException: For input string

반응형


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 == &quot;A&quot;"></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>