[자체해결] 마이바티스 다이나믹 SQL 질문
- 작성자 :
- 문*덕
- 작성일 :
- 2014-11-28 14:42:10
- 조회수 :
- 768
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
안녕하세요 egov 3.0 으로 개발중입니다.
마이바티스 쿼리.xml 질문 드립니다.
<where>
<if test=" testId != null or testId != '' " >
A.TEST_ID = #{testId}
</if>
</where>
댓글 기능이 없네요...
회사 부장님께서 알려주셔서 해결하였습니다...
or 조건을 사용하게되면 둘중하나가 true 이면 실행되기때문에
TEST_ID = NULL 이 실행되기 때문에 구문오류가 발생하게 되는 것이었습니다.
or, and 의 문제가 아닌 그 선택에 따라 if문 내의 sql 실행되어서 오류가 나는 경우였네요..
이렇게 하면 에러가 발생하고
<if test=" testId != null and testId != '' " >
하면 정상적으로 작동합니다. 근데 or 와 and 조건은 분명히 다른 것 같은데
null 거나 ''(empty) 인 경우를 피해가려고 하는데요..
인터넷에서 찾아봤을땐 "" 와 '' 도 해봤습니다.
그리고 저것을 각각 if문으로 하면 정상적으로 작동됩니다.(근데 그러면 TEST_ID = #{testID} 가 두개가 되어 버리니..
혹시 web.xml 에서 HTMLTagfilter가 영향을 주나요?
or 조건으로 하려면 어떻게 해야는지 or 조건이 안되는 것인지..
(인터넷에서 검색해서 or 조건 사용한 걸 보고 코딩했는데도 같은 에러가 발생합니다. 에러로그 첨부합니다.)
마이바티스 쿼리.xml 질문 드립니다.
<where>
<if test=" testId != null or testId != '' " >
A.TEST_ID = #{testId}
</if>
</where>
댓글 기능이 없네요...
회사 부장님께서 알려주셔서 해결하였습니다...
or 조건을 사용하게되면 둘중하나가 true 이면 실행되기때문에
TEST_ID = NULL 이 실행되기 때문에 구문오류가 발생하게 되는 것이었습니다.
or, and 의 문제가 아닌 그 선택에 따라 if문 내의 sql 실행되어서 오류가 나는 경우였네요..
이렇게 하면 에러가 발생하고
<if test=" testId != null and testId != '' " >
하면 정상적으로 작동합니다. 근데 or 와 and 조건은 분명히 다른 것 같은데
null 거나 ''(empty) 인 경우를 피해가려고 하는데요..
인터넷에서 찾아봤을땐 "" 와 '' 도 해봤습니다.
그리고 저것을 각각 if문으로 하면 정상적으로 작동됩니다.(근데 그러면 TEST_ID = #{testID} 가 두개가 되어 버리니..
혹시 web.xml 에서 HTMLTagfilter가 영향을 주나요?
or 조건으로 하려면 어떻게 해야는지 or 조건이 안되는 것인지..
(인터넷에서 검색해서 or 조건 사용한 걸 보고 코딩했는데도 같은 에러가 발생합니다. 에러로그 첨부합니다.)
첨부파일
A
안녕하세요.
에러 로그는 mybatis로 넘어온 첫번째 파라미터의 값이 null이어서 발생하는 에러입니다.
특히 null값을 java property에 바인딩하는 경우,
mybatis 내부 동작으로 인해 java type과 jdbc type이 일치하지 않을 수 있습니다.
따라서 nullable 컬럼에 대한 컬럼 타입을 mybatis 쪽에 알려주어야 합니다.
방법은 #{testId, jdbcType=xxx} 형식으로 jdbcType을 명시해주시면 됩니다.
(java type과 jdbc type 매핑 - 8.9.1 or 8.9.2 참고, http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#table1http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#table1)
위 방법으로도 안되시면 " 와 '의 위치를 변경해보십시오. 'testId != null or testId !=""'
감사합니다.
에러 로그는 mybatis로 넘어온 첫번째 파라미터의 값이 null이어서 발생하는 에러입니다.
특히 null값을 java property에 바인딩하는 경우,
mybatis 내부 동작으로 인해 java type과 jdbc type이 일치하지 않을 수 있습니다.
따라서 nullable 컬럼에 대한 컬럼 타입을 mybatis 쪽에 알려주어야 합니다.
방법은 #{testId, jdbcType=xxx} 형식으로 jdbcType을 명시해주시면 됩니다.
(java type과 jdbc type 매핑 - 8.9.1 or 8.9.2 참고, http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#table1http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#table1)
위 방법으로도 안되시면 " 와 '의 위치를 변경해보십시오. 'testId != null or testId !=""'
감사합니다.