반응형
<if test="payIngYn == 'Y'">
</if>

또는

<if test="payIngYn.equals('Y')">
</if>

한글자를 IF 문에 넣었더니, 항상 에러가 났다.

Cause: java.lang.NumberFormatException: For input string: "Y"

항상 그냥 다른 방식으로 우회해서 가다가, 아무리 생각해도 이건 말이 안되고 뭔가 방법이 있을 것 같아 찾아보았다. (여기서 기억나는건, 전에 한번 MyBatis 에서 select문을 해왔을 때, 그 값이 Y 였을 때,  JAVA에서 찍어보니 숫자 1 로 찍혀있던 기억이 난다. char를 숫자로 인식하나보다 라는 생각을 했던 기억이난다. 그런데 그 이유는 JAVA의 CHAR형태는 실제로 문자의 코드값을 저장하기 때문이라고 한다.)  

이건, MyBatis 의 문제가 아니고, OGNL(Object Graph Navigation Language)의 문제라고 한다.  MyBatis는 XML element 를 줄이고 다양한 조건을 처리하기 위해서 OGNL 표현 방식을 사용한다. (꿀팁! jsp 에서 주로 사용하는 JSTL 표현식이 OGNL 이기 때문에 이에 익숙한 사람은 MyBatis 조건문에 이를 적용하면 된다!)

반응형

싱클쿼테이션(') 으로 어떤 값을 감싼 경우, 이건 property 가 아니라고 명시해주는거지 '문자열'이라고 명시하는게 아니다. 그러면, 이를 자료형이 아니라 문자열 이라고 MyBatis에게 명시해주기 위해서는 더블쿼테이션(")으로 감싸주어 힌트를 주면된다.

그래서 결론! 해결책!

1. 싱클쿼테이션과 더블쿼테이션 위치를 변경
<if test='payIngYn=="Y"'>

2. 더블쿼테이션을 HTML 코드로 변경
<if test="payIngYn == &quot;Y&quot;">

3. toString() 함수를 이용해 String 형으로 변환
<if test="payIngYn == 'Y'.toString()">

1번을 추천한단다. (대신, 1번을 사용할 경우 == 대신에 equals 함수를 추천한다
반응형

+ Recent posts