쿼리를 작성해야 할때 전달받은 인자값을 바탕으로 반복적인 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도 작성이 가능하니 여러 방면으로 사용이 가능하다.
mybatis ORA-01745: 호스트/바인드 변수명이 부적합합니다 (0) | 2023.04.06 |
---|---|
[MyBatis] [Error] Cause: java.lang.IndexOutOfBoundsException (0) | 2023.04.06 |
Mybatis Like 검색 방법 (0) | 2021.03.23 |
mybatis if 에서 홑따옴표는 인식인되는 현상 (0) | 2019.04.30 |
요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다. (0) | 2019.04.30 |
댓글 영역