Java/mybatis
Mybatis foreach 문
원샷원따봉
2014. 11. 18. 17:16
<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");
<!-- 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" }; <!-- 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);
<select id="..." parameterType="Map" ...> <foreach collection="friendList" .../> </select>
// // parameterType="{Java object}" // SomeJavaClass pojo = new SomeJavaClass(); pojo.setEnemyList(list);
<select id="..." parameterType="SomeJavaClass" ...> <foreach collection="enemyList" .../> </select>