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
반응형
'개발이야기 > ibatis' 카테고리의 다른 글
Oracle 권한 추가 후 오류 [ORA-00942 테이블 또는 뷰가 존재하지 않습니다] (0) | 2018.02.20 |
---|