프로그래밍/JAVA
NumberformatException ,if , 문자 1글자 비교, equals , MyBatis
홍반장水_
2019. 12. 2. 15:36
반응형
#NumberformatException #if #문자 #1글자비교 #equals #MyBatis #JAVA #자바
ex 1)
<if test="stringValue == 'Y'">
</if>
ex 2)
<if test="condition.equals('Y')">
</if>
지금처럼 한 글자를 다이나믹쿼리 IF 안에서 비교할 때
java.lang.NumberFormatException: For input string: "Y" 에러 또는
비교가 되지 않을 수 있다. (인식 불가 혹은 오작동 가능성도 있음)
결론적으로 위 현상은 myBatis 문제는 아니고
OGNL(Object Graph Navigation Language) 의 문제이다.
OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고,
'YY' 나 "Y" 는 String으로 인식한다. (따옴표를 잘보자)
그래서 이와 같은 구문을 비교할 때
NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다.
그래서 아래와 같은 형변환이 가능하다.
char y = 'Y';
int code = (int)y; // code에는 Y의 코드값인 89가 저장된다
그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재한다.
1. <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경
2. <if test="stringValue == "Y""> – 쌍따옴표를 HTML 코드로 변경
3. <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환
4. 함수 생성 (equals 함수를 새로 생성하고 가져다 쓰는 방법 )
http://cofs.tistory.com/97 에서 설명하고 있는
함수를 생성해서
사용방법을 참조하여 equals함수를 재정의
1번과 4번 방법을 추천한다.
출처: https://cofs.tistory.com/96 [CofS]
반응형