<펌글:http://blog.paran.com/devtopia/13828096> 이때 지겹게 if~else if 문을 통해 아주 지저분한 소스 코드를 생성할 때가 왕왕 있게 마련이다. 이때 ibatis에서는 아주 깔금하게 구현할 수 있는 방법을 제공해 준다. <statement id="dynamicGetAccountList" resultMap="account-result"> select * from account <dynamic prepend="WHERE"> <isNotNull prepend="AND" property="firstName"> (acc_first_name = #firstName# <isNotNull prepend="OR" property="lastName"> acc_last_name = #lastName# </isNotNull> ) </isNotNull> <isNotNull prepend="AND" property="emailAddress"> acc_email like #emailAddress# </isNotNull> <isGreaterThan prepend="AND" property="id" campareValue="0"> acc_id = #id# </isGreaterThan> </dynamic> order by acc_last_name </statement> 상황에 의존적인 위 동적 statement로 부터 각각 다른 16가지의 SQL문이 생성될 수 있다. if-else구조와 문자열 연결을 코딩하는 경우 수백라인이 필요할 수도 있다. 동적 statement를 사용하는 것은 몇몇 조건적인 태그를 추가하는 것처럼 간단하게 작성할 수 있다. 이러한 조건들에 대해 간단히 정리하면 아래와 같다. 바이너리 조건 요소-바이너리 조건 요소는 정적값 또는 다른 프로퍼티값을 위한 프로퍼티값과 비교한다. 만약 결과가 true라면 몸체부분의 SQL쿼리가 포함된다. 바이너리 조건 속성
단일 조건 요소-단일 조건 요소는 특수한 조건을 위해 프로퍼티의 상태를 체크한다.
prepend statement에 붙을 오버라이딩 가능한 SQL부분(옵션) property 체크하기 위한 프로퍼티(필수)
다른 요소들 Parameter Present : 파라미터 객체가 존재하는지 체크 Parameter Present Attributes : prepend - the statement에 붙을 오버라이딩 가능한 SQL부분
Iterate : 이 태그는 Collection을 반복하거나 리스트내 각각을 위해 몸체 부분을 반복한다. Iterate Attributes : prepend - the statement에 붙을 오버라이딩 가능한 SQL부분 (옵션) property - 반복되기 위한 java.util.List타입의 프로퍼티 (필수) open - 반복의 전체를 열기 위한 문자열, 괄호를 위해 유용하다. (옵션) close - 반복의 전체를 닫기 위한 문자열, 괄호를 위해 유용하다. (옵션) conjunction - 각각의 반복 사이에 적용되기 위한 문자열, AND 그리고 OR을 위해 유용하다. (옵션)
|
'Framework > ibatis' 카테고리의 다른 글
조건비교후 서로다른 SQL문 (0) | 2008.08.27 |
---|---|
queryForList (0) | 2007.12.17 |
ibatis 튜토리얼_번역 (0) | 2007.12.17 |