[MyBatis] 동적 쿼리 IF문
[MyBatis] 동적 쿼리
쿼리를 짜다보면 동적 쿼리를 만들어야 할 때 가 있다. 싫다
마이바티스에서는 동적 쿼리를 처리하는 방법이 존재한다.
1. if 문
# keyword 가 null 이 아니면 AND KEYWORD LIKE #{keyword}
<select id="dynamicSql" resultType="EgovMap">
SELECT * FROM MAP
WHERE POIX = '100'
<if test="keyword != null">
AND KEYWORD LIKE #{keyword}
</if>
</select>
# if문 안에서 문자열 비교
# 파라미터.equals('keyword')# (파라미터 eq 'A'.toString())# 파라미터 == 'A'
<if test="keyword != null and keyword.equals('서울') ">
AND KEYWORD LIKE #{keyword}
</if>
2. choose, when, otherwise
# if - else 구문 처럼 쓸 수 있다
<select id="dynamicSql" resultType="EgovMap">
SELECT * FROM MAP
WHERE POIX = '100'
<choose>
<when test="keyword != null and keyword.equals('서울')">
AND KEYWORD LIKE #{keyword}
</when>
<when test="keyword != null and keyword.equals('부산')">
AND KEYWORD LIKE #{keyword}
</when>
<otherwise>
AND KEYWORD = '경기'
</otherwise>
</choose>
</select>
3. foreach
# 마이바티스는 반복문도 가능하다
#
foreach 를 사용하여 collection 에 대해 반복처리와 IN 조건에 사용한다
<select id="dynamicSql" resultType="EgovMap">
SELECT * FROM MAP
WHERE KEYWORD IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>