foreach
반복적인 SQL 구문을 작성할 때 사용합니다.
주로 데이터 타입이 동일한 다수의 배열 데이터를 검색조건에 반영해야 할 때, OR 또는 IN 구문에서 많이 사용합니다.
6가지의 속성을 가지고 있으며
1) collection : 전달받은 인자를 속성값으로 삽입합니다. Map, Array, List, Set 등과 같은 반복 가능한 객체를 전달할 수 있습니다.
2) item : collection속성에서 전달받은 collection 인자값을 대체할 '이름'을 속성 값으로 삽입합니다.
3) open : 구문이 시작될때 삽입할 문자열을 속성 값으로 삽입합니다.
4) close : 구문이 종료될때 삽입할 문자열을 속성 값으로 삽입합니다.
5) separator : 반복되는 구문 사이에 삽입할 문자열을 속성값으로 삽입합니다.
6) index : index값을 부를 일종의 변수명을 속성값으로 삽입합니다. 태그 내에 #{index}를 통해 호출할 때 0부터 반환됩니다.
예제
select * from TABLE
<if test="{ Map, Array, List 변수명} != null and { Map, Array, List 변수명} != ''">
where column not in
<foreach collection='{ Map, Array, List 변수명}' index='index' item='item' open='(' close=')' separator=','>
#{item}
</foreach>
</if>
['A', 'B', 'C'] 형식의 list 를 넣는다면
select * from TABLE where column not in ('A', 'B', 'C')
이 된다
하지만 collection에 null이 온다면 에러가 나니까 if 로 처리해줬다