관리 메뉴

SIMPLE & UNIQUE

MyBatis <foreach>를 이용한 배열 파라미터 삽입 본문

oracle

MyBatis <foreach>를 이용한 배열 파라미터 삽입

착한코딩 2017. 5. 14. 16:13

쿼리를 작성해야 할때 전달받은 인자값을 바탕으로 반복적인 SQL 구문을 작성할때 유용하다.


대표적으로 체크박스등과 같은 인자값이 동일한 다수의 배열 데이터를 검색조건에 반영해야 할때가 있는데, 이때 OR 구문 또는 IN 구문으로 작성하면 편리하게 사용할 수 있다.


다만 foreach의 경우 인자값으로 List와 Array 형태의 collection 타입만 사용이 가능하다.


foreach 기본 문법 형태


<foreach collection="sUser_type" item="type"  open="(" close=")" separator="or">

</foreach>


collection = 전달받은 인자. List나 Array 형태만 가능

item = 전달받은 인자값을 alias 명으로 대체

open = 해당 구문이 시작될때 삽입할 문자열

close = 해당 구문이 종료될때 삽입할 문자열

separator = 반복 되는 사이에 출력할 문자열

index=반복되는 구문 번호이다. 0부터 순차적으로 증가


List 형태를 넘겼을 경우의 예제.


<java Code>


List sUserTP = new ArrayList();

sUserTP.add("SP");

sUserTP.add("BX");


HashMap hm = new HashMap();

hm.put("sUser_age", 23) ;

hm.put("sUser_type", sUserTP) ;

 


 <SQL Mapper>


<select id="getTList" resultType="hashmap" parameterType="hashmap">

    SELECT

        name, age

    FROM

        TB_user

    WHERE

        age = #{sUser_age} AND

        <foreach collection="sUser_type" item="type"  open="(" close=")" separator="or">

            user_type = #{type.value}

        </foreach>

</select>

  

또는 or 구문을 IN 구문으로 변경

  

<select id="getTList" resultType="hashmap" parameterType="hashmap">

    SELECT

        name, age

    FROM

        TB_user

    WHERE

        age = #{sUser_age} AND

        user_type IN

        <foreach collection="sUser_type" item="type"  open="(" close=")" separator=",">

            #{type.value}

        </foreach>

</select>


Array 형태를 넘겼을 경우의 예제.


<java Code>


 String[] sUserTP = {"SP", "BX"} ;


HashMap hm = new HashMap();

hm.put("sUser_age", 23) ;

hm.put("sUser_type", sUserTP) ;

 

<SQL Mapper>


<select id="getTList" resultType="hashmap" parameterType="hashmap">

    SELECT

        name, age

    FROM

        TB_user

    WHERE

        age = #{sUser_age} AND

        user_type IN

        <foreach collection="sUser_type" item="type" index="index"  open="(" close=")" separator=",">

            #{type[index]}

        </foreach>

</select>


foreach를 잘 이용하면 단순 검색뿐만 아니라 동일한 구문으로 이루어진 다수의 INSERT, UPDATE도 작성이 가능하니 여러 방면으로 사용이 가능하다.


출처: http://fruitdev.tistory.com/187 [과일가게 개발자]



Comments