일반적으로 검색 기능이나 다중 입력 처리 등을 수행해야 할 경우 SQL을 실행하여 DAO를 여러 번 호출 시키는 방법으로 쿼리를 구현
동적 쿼리를 구현할 때 가장 기본적으로 사용되는 구문
특정 조건을 만족할 경우 안의 구문을 쿼리에 포함시킨다.
< 원하는 금액대에 적합한 추천 메뉴 목록 불러오기 >
<select id="selectMenuByPrice" parameterType="hashmap"
resultMap="menuResultMap">
SELECT
A.MENU_CODE
, A.MENU_NAME
, A.MENU_PRICE
, A.CATEGORY_CODE
, A.ORDERABLE_STATUS
FROM TBL_MENU A
WHERE A.ORDERABLE_STATUS = 'Y'
<if test="price gte 0 and price lte 10000"/>
<!-- gte == [>=] -->
<!-- lte == [<=] -->
<![CDATA[
AND A.MENU_PRICE < #{ price }
]]>
<if test="price gt 10000 and price lte 20000">
AND A.MENU_PRICE BETWEEN 10001 AND #{ price }
</if>
<if test="price gt 20000 and price lte 30000">
AND A.MENU_PRICE BETWEEN 20001 AND #{ price }
</if>
<if test="price gt 30000">
AND A.MENU_PRICE BETWEEN 30001 AND #{ price }
</if>
ORDER BY A.MENU_CODE
</select>
<![CDATA[범위]]> 범위 사이의 내용은 태그를 인식하지 않음
gte == [>=]
lte == [<=] 왼쪽을 기준으로 크기 판별이 가능하다.
Java의 if-else, switch, jstl의 choose구문과 유사
주어진 구문 중 한 가지 만을 수행하고자 할 때 사용한다.
<select id="searchMenuBySupCategory" parameterType="SearchCriteria"
resultMap="menuResultMap">
SELECT
A.MENU_CODE
, A.MENU_NAME
, A.MENU_PRICE
, A.CATEGORY_CODE
, A.ORDERABLE_STATUS
FROM TBL_MENU A
WHERE A.ORDERABLE_STATUS = 'Y'
<!-- swith문과 유사한 choose -->
<choose>
<when test="value == '식사'">
AND A.CATEGORY_CODE IN (4, 5, 6, 7)
</when>
<when test="value == '음료'">
AND A.CATEGORY_CODE IN (8, 9, 10)
</when>
<otherwise>
AND A.CATEGORY_CODE IN (11, 12)
</otherwise>
</choose>
ORDER BY A.MENU_CODE
</select>