ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mybatis foreach 문
    Java/mybatis 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>


    'Java > mybatis' 카테고리의 다른 글

    mybatis_여러개의 db연동  (0) 2014.11.18
Designed by Tistory.