단순 List나 Array의 foreach INSERT, UPDATE, DELETE, MERGE 문의 관한 내용은 아래 게시글을 참고하자.
foreach
collection : 넘어온 파라미터의 반복하기 원하는 파라미터를 입력하여 주면 된다. 예를 들어 vo의 testMap이라는 Map이 있다면 collection에 testMap을 넣어주면 된다.
item : List의 경우 순차적으로 반복하여 값이 저장된다. item을 data라고 하였을 경우 WHERE col = #{data} 이런식으로 사용이 가능하다. Map에서는 key의 value가 저장된다.
separator : 반복 되는 사이에 출력 할 문자열
open : 해당 구문이 시작될때 삽입되는 문자열
close : 해당 구문이 종료될때 삽입되는 문자열
index : List의 경우 index 번호, Map의 경우 key 값이 저장된다.
<foreach collection="Map or List or Array" item="alias" ></foreach>
Map 안에 Map (or Value Object)
public class TestVO {
private String name;
private Map<String, String> infoObj;
}
TestVO에 다음과 같은 구조의 데이터가 들어있다고 가정할 때, NAME, AGE와 COLOR 컬럼 데이터를 INSERT 해야한다.
{
name: "haenny",
info: {
// key : value = age : color
// 나이에 좋아했던 색상
14 : "pink",
15 : "yellow",
20 : "blue"
}
}
List 형태의 경우 TestVO를 foreach 돌려서 사용하면되지만, Map의 경우 Key와 Value 값을 가져올 수 있나? List이거나 Array가 아니기 때문에 foreach 문법을 사용할 수 없는 거 아닌가? 생각할 수 있다.
<select id="insInfo" parameterType="testVO">
INSERT INTO TEST_TBL (
NAME,
AGE,
COLOR
)
<foreach collection="info" item="value" index="key" separator="" open="" close="">
SELECT #{name} AS NAME, // TEST VO에서 바로 가져온 값
#{key} AS AGE, // info 라는 collection (Map) 의 Key 값
#{value} AS COLOR // info 라는 collection (Map) 의 Value 값
FROM DUAL
</foreach>
</select>
INDEX 를 List나 Array의 반복되는 구문 형태로만 사용된다고 생각할 수 있지만, Map의 경우 Key 값이 저장된다.
Map 안에 List
<select id="getTest" parameterType="testVO2" resultType="java.util.list">
SELECT TEST
FROM TEST_TBL
WHERE
<foreach collection="mapData" item="value" index="key" separator="AND">
#{key} IN
// mapData = {key : value} 형태인데 value 값이 List 형태인 경우이다
<foreach collection="value" item="item" index="idx" separator="or" open="(" close=")">
#{item}
</foreach>
</foreach>
</select>
'JVM > Spring' 카테고리의 다른 글
[Spring] 스프링 5.0 WebFlux 에 대해 (0) | 2022.05.11 |
---|---|
[Spring] Request Parameter (QueryString, Json) 데이터와 Annotation (@RequestParam, @RequestBody) 알고 쓰자 (0) | 2022.04.05 |
[Spring] Spring Scheduler 간단하게 설정하기 (1) | 2022.03.07 |
[Web] 415 (Unsupported Media Type) 오류 원인 살펴보기 (1) | 2022.02.18 |
[Spring] 스프링 properties 설정 파일 분리하기 (0) | 2022.01.26 |
댓글