- 동적 쿼리 : foreach
동적 SQL에서는 collection에 대한 반복처리를 할 수 있다.
- collection : collection의 형태(array, list, set, map 등)
- index : 반복되는 구문 번호. 0부터 순차적으로 증가
- item : 전달받은 값의 alias
- open : 구문이 시작될때 삽입할 문자열
- close : 구문이 종료될때 삽입할 문자열
- separator : 반복 되는 사이에 출력할 문자열
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
<where>
<foreach item="item" index="index" collection="list"
open="ID in (" separator="," close=")" nullable="true">
#{item}
</foreach>
</where>
</select>
Map 형태에서는 index가 key, item이 value로 사용된다.
Map<String, String> map = new HashMap<>();
map.put("T", "new title");
map.put("C", "new content");
<select id="listBoard" resultType="board">
select * from board
<trim prefix="where (" suffix-")" prefixOverrides="OR">
<foreach item="val" index="key" collection="map">
<trim prefix="OR">
<if test="key == 'T'.toString()">
title = #{val}
</if>
<if test="key == 'C'.toString()">
content = #{val}
</if>
<if test="key == 'W'.toString()">
writer = #{val}
</if>
</trim>
</foreach>
</trim>
</select>