Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
Mybatis foreach 문법
1 2 3 | <foreach collection= "param.place" item= "place" open = "(" close = ")" separator= "or" > sh.SNA_SHOW_KIND_IDX = ${place} </foreach> |
collection = 전달받은 인자값
item = 전달받은 인자값을 다른이름으로 대체
open 해당 구문이 시작할떄 (
close 해당구문이 끝날떄
separator 한번 이상 반복할때 반복되는 사이에 해당 문을 넣어줌
note: "collection"파라미터 객체로 MyBatis 에 List 인스턴스나 배열을 전달 할 수 있다. 그렇게 하면 MyBatis는 Map으로 자동으로 감싸고 이름을 키로 사용한다. List 인스턴스는 'LIST' 를 키로 사용하고, 배열 인스턴스는 'array'를 키로 사용한다.
1 2 3 4 5 6 7 8 9 | < select id= "..." parameterType= "..." resultType= "Map" > select * from test < where > name in <foreach collection= "list" item= "item" index = "index" separator= "," open = "(" close = ")" > #{item.value} </foreach> </ where > </ select > |
mybatis user guide를 보면 foreach의 경우 list나 array 타입을 collection으로 설정할 수 있으며 이때 list나 array 데이터는 map으로 타입이 변환되어 저장된다고 함
list를 사용할 경우 (변수 이름은 list가 아니어도 됨)
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
1 2 3 4 | <! -- collection 속성 값은 반드시 list나 array만 설정해야 함 --> <foreach collection= "list" item= "item" index = "index" separator= "," open = "(" close = ")" > #{item.value} </foreach> |
value 속성을 사용한 것으로 보아 Map.Entry.getValue 메서드를 호출하는 것이 아닐까 하는데...
array를 사용할 경우(변수 이름은 array가 아니어도 됨)
String[] array = new String[] { "a", "b", "c" };
1 2 3 4 | <! -- collection 속성 값은 반드시 list나 array만 설정해야 함 --> <foreach collection= "array" item= "item" index = "index" separator= "," open = "(" close = ")" > ${array[ index ]} </foreach> |
select의 parameterType이 map이나 java 오브젝트라면 collection 값에 속성 이름을 설정하면 됨
parameterType="Map"인경우
Map<String, Object> map = new HashMap<String, Object>();
map.put("friendList', list);
1 2 3 | < select id= "..." parameterType= "Map" ...> <foreach collection= "friendList" .../> </ select > |
parameterType="{Java object}"인 경우
SomeJavaClass pojo = new SomeJavaClass();
pojo.setEnemyList(list);
1 2 3 | < select id= "..." parameterType= "SomeJavaClass" ...> <foreach collection= "enemyList" .../> </ select > |