본문 바로가기

개발이야기/ibatis

[iBatis] Integer isNotNull 사용하기

Dynamic SQL

dynamic SQL은 ibatis를 사용하는데 있어서 매우 유용하다 파라미터의 값 상태에 따라서 여러 종류의 sql문을 변경할 수 있는데 아래 코드는 대표적인 dynamic select statement이다.

1
2
3
4
5
6
7
<select id="dynamicGetAccountList" cacheModel="account-cache" parameterClass="Account" resultMap="account-result" >
  select * from ACCOUNT
    <isGreaterThan prepend="and" property="Id" compareValue="0">
       where ACC_ID = #Id#
    </isGreaterThan>
  order by ACC_LAST_NAME
</select>
cs


위 example은 Id 변수의 값 상태에 따라서 아래와 같은 두가지 SQL로 나올 수 있다.


Id가 0보다 클 경우(존재할 경우)

1
select * from ACCOUNT where ACC_ID = ?
cs


ID가 0이거나 작을경우

1
select * from ACCOUNT
cs


그런데 왜 Id가 존재하는지 여부를 isGreaterThan으로 쓸까?


구문에 따라서, 옵션에 따라서 다르겠지만 Id(integer)가 null일 때 isNotNull을 거치지 않을 때도 있었다.

그리고 Id 변수가 선언되지 않았을때 0(default)로 되어 있을 때도 있었다.


그러므로 보통 Key값으로 쓰이는 Id 변수에 대해서 isGreaterThan을 사용하면, 존재 여부에 따른 SQL분기문을 만들 수 있게 된다.


End of Document 

태그