본문 바로가기
Java/MyBatis

[MyBatis] test="stringValue == 'Y'" 에서 NumberFormatException

by eugene9 2025. 6. 29.

문제 상황

문제가 되었던 부분의 조건문이다.

<if test="stringValue == 'Y'">
    AND A.COLUMN = #{condition}
</if>

Java 측에서 stringValue에 할당한 값이 "Y" 였음에도 NumberFormatException이 발생한다.

이는 stringValue에 String 타입의 값을 할당하였으나, 실제로 MyBatis에서 작성한 'Y'는 Char 타입에 해당되기 때문이다.

이러한 현상이 나타나는 까닭은 정확히는 MyBatis의 문제라기보단 OGNL(Object-Graph Navigation Language) 인터프리터의 영향 때문인데, OGNL 인터프리터는 'Y'는 Char 타입으로, 'YY' 혹은 "Y"는 String 타입으로 해석한다.

또한 Java에서는 Char 타입을 코드 값으로 저장하고 있다. 그래서 Char 타입의 비교에서는 반드시 해당 값을 숫자로 변환해서 비교한다.

따라서 실제 동작은 아래와 같고, NumberFormatException이 발생한다.

"Y" == 89 // (int) 'Y'
>>> Error querying database. Cause: java.lang.NumberFormatException: For input string: "Y"

 

대응 방법

가장 간단하고 직관적인 방법으로, 큰따옴표와 작은따옴표를 서로 반대되게 입력해주면 된다.

<if test='stringValue == "Y"'></if>

 


Reference

 

mybatis에서 NumberformatException이 나는 경우

java.lang.NumberFormatException: For input string: “” 에러 해결방법 Error querying database. Cause: java.lang.NumberFormatException: For input string: “y” Cause: java.lang.NumberFormatException: For input string: “y” myBatis 사용시 위

itallinform.tistory.com

 

'Java > MyBatis' 카테고리의 다른 글

[MyBatis] XML 세미콜론 포함 시 SQLSyntaxErrorException  (0) 2025.04.03