단순 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>
https://haenny.tistory.com/284 에서 퍼옴 정리 잘되어 있네 살아있네 ㅎ
'study > java' 카테고리의 다른 글
인텔레제이 빌드 개 느림 해결 방법 빌드가 느리다 아놔 (0) | 2023.10.25 |
---|---|
xattr -cr "path" (0) | 2023.09.11 |
[Web] 415 (Unsupported Media Type) 오류 원인 살펴보기 (0) | 2023.07.12 |
[Oracle] OUTER JOIN 사용 방법과 차이점 (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN) (0) | 2023.07.12 |
[MyBatis] 시퀀스 자동증가(NEXTVAL) 사용한 INSERT foreach 쿼리 (0) | 2023.07.12 |