myBatis 동적쿼리에서 문자열 비교하기

myBatis 로 개발하면서 그동안 직접쿼리를 만들일이 없어서( 디비쪽 작업하시는 분이 Stored Procedure 를 맹글어 줘서 그걸 myBatis 로 호출했었음 )

myBatis 동적쿼리를 쓸일이 없었는데

최근에 혼자 개발하는 후로젝트를 하나 할일이 있어서 직접 쿼리를 맨들어야만 했었다.



그러다 보니 그동안 별 관심없던 myBatis 동적쿼리를 써서 개발해야만 해서 문득 써 보았는데 삽질이 시작되었다.


myBatis 는 iBatis 에서 쓰던 <isEmpty/> <isEquals/> <isNotEquals/> 요딴 태그들 대신

간단명료하게 <if test="조건"/> 요걸로 바꼈다.

오홍 좋은데 하면서 개발을 하다

문자열을 비교해서 처리할 부분이 생겨서 내는 당연히 <if test="removed=='N'" > 요렇게 하면 될줄 알고 했는데 아무리 해도 안됐다.

<if test="removed==N" > 이런것도 해보고 오만걸 다써봤는데 계속 삽질만 됐다.



구글로 검색을 해도 키워드를 후진 키워드를 넣었나 검색도 드럭게 안됐다. ... -_-

겨우 해결방법을 찾았는데.. 음 이런걸 검색하는 능력이 후지진 않았는데 이상하게 검색이 잘 안됐다. 



결론적으로 죠걸 해결할려면 요렇게 하면 된다.
<if test="removed!=null and removed.equalsIgnoreCase('N')">REMOVED = 'N'</if>



보니까 죠기 test 에서 파라메터로 넘어온 프로퍼티 객체의 메소드를 직접 호출할수 있는것 같다!!!!!

test 안에서 쓰는 메소드니깐 return 이 boolean 타입이여야 하긋지???

파라메터로 null 이 넘어올수도 있으니깬 익셉션 나는걸 방지하기 위해서 일단 null 인지 비교하고 다음으로 넘어온 프로퍼티가 스트링 객체니까

대소문자 안가리고 비교하라고 equalsIgnoreCase 메소드를 호출하도록 했다. 물론 equals() 메소드를 호출해도 상관은 없다.