본문 바로가기

study/java

MyBatis] Dynamic Query Map(or Value Object) 파라메터 foreach 문법에 key, value 사용하기

단순 List나 Array의 foreach INSERT, UPDATE, DELETE, MERGE 문의 관한 내용은 아래 게시글을 참고하자.

 

 

 

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! MySQL foreach 사용방.....

haenny.tistory.com

 

 

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL Oracle 버전이 궁금하다면 ? 클릭 ! [MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) [MyBatis] List 파라메터 foreac.....

haenny.tistory.com

 

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  에서 퍼옴 정리 잘되어 있네 살아있네 ㅎ