1. 동적 쿼리 : if
동적 쿼리 if 문은 다른 곳에서 사용하는 것과 동일한 조건문이다.
아래의 구문은 선택적으로 문자열 검색 기능을 제공할 것이다.
<select id="findActiveBlogWithTitleLike" resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
위의 구문에서 title 값이 없다면 모든 active 상태의 Blog가 리턴될 것이다.
하지만 title 값이 있다면 그 값과 비슷한 데이터를 찾게 될 것이다.
만약 title과 author를 사용하여 검색하고 싶다면?
여기서의 포인트는 각각의 if문은 개별적으로 동작한다는 것이다.
<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
2. 동적 쿼리 : choose
적용할 조건들 중 한가지 경우만을 원할 때는?
choose를 사용하면 된다. choose는 자바의 'if~else'와 유사하다.
<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
위의 쿼리는 title이 존재하는지 확인하고, 없다면 author가 있는지 확인한다.
둘다 없다면 featured 상태의 blog가 리턴된다.