DOC_NUM (게시글번호) 컬럼값을
넘어오는 파라미터 statusFlag라는 값에 따라 #{docnum}이라는 파라미터로 insert할지
SEQ로 insert할지를 구현하고 싶었다.
--> Update모드일때는 docnum을 update
--> Update가 아닐때 모드에는 docnum을 신규번호로insert
<기존>
satusFlag를 U라는 1글자 단어로 지정하고
위와 같이 동적쿼리를 작성했다.
나 같은 경우는 choose , when 구문에서 equals로 'U'자 비교했는데
‘U’ 파라미터를 던질 때 계속 otherwise로 빠지는 문제가 있었다. 아놔!!!!
mybatis에서 문자 1글자에 대한 equals 문을 제대로 인식하지 못하는 문제라고 생각.
파라미터를 문자 1글자가 아니라 단어로 변경했다.
<변경후>
U -> Update 로 변경
고치고 실행하니 잘되더이다.......
그렇다면 왜??????????????
<if test=”statusFlag == ‘U’”>
<if test=” ‘U’.equals(statusFlag) ”>
경우 한 글자로 다이나믹쿼리에서 비교를 하게 되면
java.lang.NumberFormatException :For input string 이라는 에러가 발생하거나
또는 비교자체가 되지 않을 수 있다고 한다 ( 파라미터 인식 X )
다만, mybatis의 문제는 아니고
OGNL(Object Graph Navigation Language) 문제라고…
OGNL 에서는 U 문자를 char 형으로 인식하고 Update 문자를 String 으로 인식하기 때문에
<if test=”statusFlag == ‘U’”>
<if test=” ‘U’.equals(statusFlag) ”>
와 같은 case일경우 NumberFormat으로 비교를 시도해서 Exception이 나게 된다..
그렇다면 해결방법은 뭘까????
1. 쌍따옴표와 홑따옴표 위치 변경
<if test=’statusFlag == “U”’>
2. 쌍따옴표를 HTML 코드로 변경
<if test=”statusFlag == "U"”>
3. toString()함수를 통해 char -> string으로 변환
<if test=”statusFlag == ‘U’.toString()”>
4. 파라미터 변경
<if test=”statusFlag == ‘Update’”>
5. equals 를 재정의해서 사용하는 방법도 있다고…
'Framework > Mybatis' 카테고리의 다른 글
Request processing is failed 오류 (0) | 2018.12.13 |
---|---|
ORACLE CLOB 처리 / resultMap 사용방법 (0) | 2016.10.28 |
[Mybatis] null 처리방법 / null 체크 / jdbcTypeForNull (0) | 2016.08.09 |
org.xml.sax.SAXParseException; 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다. (0) | 2016.05.26 |