<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 |
비교되는 property(필수) |
compareProperty |
비교되는 다른 property (필수 또는 compareValue) |
compareValue |
비교되는 값(필수 또는 compareProperty) |
<isEqual> |
프로퍼티가 값 또는 다른 프로퍼티가 같은지 체크 |
<isNotEqual> |
프로퍼티가 값 또는 다른 프로퍼티가 같지 않은지 체크 |
<isGreaterThan> |
프로퍼티가 값 또는 다른 프로퍼티 보다 큰지 체크 |
<isGreaterEqual> |
프로퍼티가 값 또는 다른 프로퍼티 보다 크거나 같은지 체크 |
<isLessThan> |
프로퍼티가 값 또는 다른 프로퍼티 보다 작은지 체크 |
<isLessEqual> |
프로퍼티가 값 또는 다른 프로퍼티 보다 작거나 같은지 체크
사용법 예제) <isLessEqual prepend="AND" property="age" compareValue="18"> ADOLESCENT = 'TRUE' </isLessEqual> |
단일 조건 요소-단일 조건 요소는 특수한 조건을 위해 프로퍼티의 상태를 체크한다.
prepend statement에 붙을 오버라이딩 가능한 SQL부분(옵션) property 체크하기 위한 프로퍼티(필수)
<isPropertyAvailable> |
프로퍼티가 유효한지 체크 (이를 테면 파라미터의 프로퍼티이다.) |
<isNotPropertyAvailable> |
프로퍼티가 유효하지 않은지 체크 (이를 테면 파라미터의 프로퍼티가 아니다.) |
<isNull> |
프로퍼티가 null인지 체크 |
<isNotNull> |
프로퍼티가 null이 아닌지 체크 |
<isEmpty> |
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null이거나 empty(“” or size() < 1)인지 체크 |
<isNotEmpty> |
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null 이아니거나 empty(“” or size() < 1)가 아닌지 체크
사용법 예제) |
다른 요소들
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을 위해 유용하다. (옵션)
|
java.util.List 타입의 프로퍼티 반복 사용법 예제) <iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR"> username = #userNameList[]# </iterate> 주의:iterator요소를 사용할 때 리스트 프로퍼티의 끝에 중괄호[]를 포함하는 것은 중요하다. 중괄호는 문자열처럼 리스트를 간단하게 출력함으로부터 파서를 유지하기 위해 리스트처럼 객체를 구별한다. |
'프로그래밍 > Framework' 카테고리의 다른 글
[Struts2] <s:iterator> <s:if> 사용법 (0) | 2009.04.13 |
---|---|
[iBatis] 동적쿼리에서 ORDER BY 하기 (0) | 2009.04.13 |
[Struts2] <s:select> 사용법 (0) | 2009.04.10 |
[Struts2] 태그에서 변수 사용법 (0) | 2009.04.08 |
[Struts2] result의 type 속성 (0) | 2009.04.08 |