IT 소스/MyBatis

[MyBatis] <foreach> - 코드를 반복적으로 처리

한량이야기 2024. 2. 8. 13:52
반응형

안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.

foreach tag

 

<foreach> 태그는 반복적인 작업을 수행할 때 사용되는 태그로

 Java에서 제공하는 List나 map 또는 배열과 같은 

컬렉션 데이터를 반복하여 SQL 쿼리를 생성할 때 활용됩니다.

 

1. <foreach> 태그의 구문 및 사용법

<!-- <foreach> 태그의 기본 구조 -->
<foreach collection="collectionName" item="itemName" index="indexName" 
         open="openString" close="closeString" separator="separatorString">
    <!-- 반복 작업 수행 -->
</foreach>

 

<foreach> 태그의 주요 속성

속성명 속성 설명
collection 반복할 대상이 되는 컬렉션의 이름을 지정합니다.
이는 MyBatis 매퍼 메서드에서 전달되는 파라미터 중 하나여야 합니다.
item 현재 반복되고 있는 컬렉션의 요소를 참조할 때 사용할 변수의 이름을 지정합니다.
index
현재 반복되고 있는 요소의 인덱스를 참조할 때 사용할 변수의 이름을 지정합니다.
 필요에 따라 선택적으로 사용할 수 있습니다.
open
반복이 시작될 때 삽입될 문자열을 지정합니다.
close 반복이 끝날 때 삽입될 문자열을 지정합니다.
separator 각 요소 사이에 삽입될 문자열을 지정합니다. 
제일 마지막 요소 뒤에는 삽입되지 않습니다.
itemPrefix 각 요소에 적용할 접두사를 지정합니다.
itemSuffix 각 요소에 적용할 접미사를 지정합니다.

 

2. <foreach> 태그의 예제

<!-- 사용자 정보를 검색하는 쿼리 -->
<select id="selectUsersByIdList" parameterType="java.util.List" resultType="User">
    SELECT * FROM users
    WHERE id IN
    <foreach item="id" collection="list" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

위의 예제에서는 사용자의 'ID' 목록을 받아 해당 'ID'에 해당하는 

사용자를 검색하는 쿼리를 보여줍니다. 

 

<foreach> 태그는 'ID' 목록을 받아 아래와 같은 SQL의 'IN' 절을 생성합니다. 

 

SELECT * FROM users
    WHERE id IN ('codemen', 'yesorno', 'loveyou')

 

참고사항

collection 파라미터로 Map이나 배열객체와 더불어

List, Set등과 같은 반복가능한 객체를 전달할 수 있습니다.

반복가능하거나 배열을 사용할 때 index값은 현재 몇 번째 반복인지를 나타내고

value항목은 반복과정에서 가져오는 요소를 나타냅니다. 

Map을 사용할 때 index는 key객체가 되고 항목은 value객체가 됩니다.

 

리스트 또는 배열의 경우 parameterType="Map"으로 설정하고,
parameterType이 리스트이면 collection="list",

배열이면 collection="array"로 설정합니다.

반응형