본문 바로가기
카테고리 없음

MyBatis list 파라미터 foreach 처리법

by 기록하는 거부기 2025. 7. 10.

MyBatis를 사용하다 보면 다수의 데이터를 조건으로 조회해야 하는 상황이 자주 발생합니다.
특히 여러 개의 ID나 상태값을 기준으로 조회할 때 List 파라미터를 전달하고 foreach로 처리하는 방법이 자주 활용됩니다.
이 글에서는 MyBatis에서 List를 파라미터로 전달하고 foreach 태그를 이용해 SQL에 적용하는 방법을 예제 중심으로 정리해보겠습니다.


1. MyBatis에서 List 파라미터가 필요한 상황

다음과 같은 경우에 List 파라미터 처리가 필요합니다.

  • 여러 개의 ID로 데이터를 조회할 때
  • 상태 코드 리스트를 조건으로 줄 때
  • 대량의 사용자 또는 상품 번호 등을 조건에 활용할 때

이러한 경우 반복문으로 쿼리를 생성하지 않고, MyBatis의 foreach 태그를 활용해 간결하고 안전한 SQL을 작성할 수 있습니다.


2. foreach 태그 기본 구조 이해

MyBatis의 <foreach>는 컬렉션을 순회하면서 SQL의 일부를 동적으로 생성할 수 있게 해줍니다.
기본 구조는 다음과 같습니다:

<foreach collection="list"
         item="item"
         open="("
         close=")"
         separator=",">
  #{item}
</foreach>
  • collection: 전달받은 파라미터 이름
  • item: 루프 안에서 사용할 변수명
  • open/close: 괄호 등 감싸는 문자
  • separator: 항목 구분자 (보통 쉼표)

3. 단순 List 파라미터 처리 예제

아래는 단순히 List<Integer> 타입의 ID 목록을 전달해 IN 조건에 사용하는 예시입니다.

Mapper XML

<select id="selectUsers" resultType="User">
  SELECT * FROM users
  WHERE id IN
  <foreach collection="idList" item="id" open="(" separator="," close=")">
    #{id}
  </foreach>
</select>

Java 코드

List<Integer> idList = Arrays.asList(1, 2, 3);
List<User> users = userMapper.selectUsers(idList);

Mapper 인터페이스의 파라미터 이름이 idList라면, XML에서도 collection="idList"로 일치시켜야 합니다.


4. 객체 List 파라미터 처리 예제

객체 리스트(List<User>)를 넘기는 경우에는 item.property 형태로 접근해야 합니다.

XML 예시

<select id="selectByUsernames" resultType="User">
  SELECT * FROM users
  WHERE username IN
  <foreach collection="userList" item="user" open="(" separator="," close=")">
    #{user.username}
  </foreach>
</select>

Java 예시

List<User> userList = Arrays.asList(
  new User("kim"), new User("lee")
);
userMapper.selectByUsernames(userList);

객체를 순회하면서 특정 필드만 SQL에 사용할 수 있어 복잡한 조건에도 유연하게 대응할 수 있습니다.


5. IN 조건 외 다양한 활용 방법

foreach는 IN 절 외에도 다음과 같이 활용 가능합니다.

  • VALUES 절에 여러 행 INSERT
  • 동적 WHERE 절 구성
  • 복합 조건 구성 (key = value 형태 등)

또한 separator, open, close 속성을 적절히 조합하면 쿼리 포맷 오류를 예방하고 가독성도 높일 수 있습니다.


✅ 마무리

MyBatis에서 List 파라미터를 처리할 때 foreach 태그를 잘 활용하면, 복잡한 조건도 안전하고 효율적으로 처리할 수 있습니다.
단순한 ID 리스트부터 객체의 특정 필드 조건까지 다양하게 활용 가능하며, XML 구조와 Java 코드 간 파라미터 명칭 일치가 중요합니다.
이번 글에서 소개한 예제들을 직접 따라 해보면 실무에서 바로 활용할 수 있을 것입니다.