![[Mybatis] 마이바티스 foreach를 이용하여 IN절 처리하기](https://blog.kakaocdn.net/dna/cjE9ya/btsn7uxjzSF/AAAAAAAAAAAAAAAAAAAAADjT92ifD2C7k-3XsBCoONbwbjkL59NeyJfF7Y5r4sIc/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1764514799&allow_ip=&allow_referer=&signature=sKNgk3EnRJ5hjKHe95rRVOR7PUQ%3D)
안녕하세요!
오늘은 Mybatis에서 쿼리를 작성하다 보면 IN절을 처리할 때 수월하게 처리할 수 있는 방법에 대해 정리해보려고 합니다.
MyBatis는 동적 SQL을 지원하여 조건에 따라 쿼리를 유연하게 처리할 수 있기 때문에, IN 절을 처리하는 데에도 편리한 foreach 태그를 활용할 수 있습니다.
IN 절은 여러 개의 값을 비교하거나 조회하는데 사용되는데, MyBatis의 foreach 태그를 활용하면 해당 작업을 간편하게 처리할 수 있습니다.
이제 MyBatis의 foreach 태그를 활용하여 IN 절을 보다 수월하게 다루는 방법을 정리해 보겠습니다. 많은 도움이 되기를 바랍니다!
1. Mybatis mapper.xml 정의
<!-- 매핑을 사용할 때 in절을 처리할 SQL 구문 정의 -->
<select id="getMemberList" parameterType="java.util.List" resultType="Member">
SELECT * FROM Member
WHERE MemberId IN
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
위의 소스 코드는 Mybatis에서 사용자 목록을 조회하는 쿼리입니다.
'getMemberList'라는 ID로 SQL을 매핑하고, 'java.util.List' 타입의 파라미터로 IN절에 들어갈 리스트 값을 설정합니다. 그리고 조회 결과를 Member 클래스 타입에 반환을 합니다.
IN절 처리하는 부분을 보게 되면 'foreach' 사용하여 처리를 하고 있습니다. 'foreach' 태그는 주어진 리스트를 순회하며 동적으로 SQL을 생성하는 데 사용됩니다.
'foreach' 태그에는 3개의 속성이 사용되고 있습니다.
- 'item' : 각 항목에 대한 변수명을 지정합니다. 여기서는 'item'으로 정의되어 있으며, 리스트의 각 항목을 'item'으로 처리합니다.
- 'collection' : 순회할 리스트를 지정합니다. 'list'라는 이름의 파라미터로 전달받은 리스트를 순회합니다.
- 'open', 'separator', 'close' : 해당 옵선은 각각 IN절의 시작, 구분자, 끝을 지정합니다. 해당 소스 코드에서는 '('로 시작, ', '로 항목들
을 구분, ')'로 끝나게 됩니다.
마지막으로 '#{item}'은 'foreach' 태그에서 정의한 'item' 변수를 사용하여 리스트의 각 항목 값을 삽입하는 부분입니다.
이렇게 Mybatis의 'foreach' 태그를 활용하여 동적으로 리스트의 값들을 IN절에 쉽게 처리할 수 있습니다.
2. Java Mapper interface
@Mapper
public interface MemberMapper {
// 사용자 목록 조회
List<Member> getMemberList(List<Integer> ids);
}
Mybatis mapper.xml과 매핑이 되는 java mapper 인터페이스를 정의한 부분입니다.
위의 인터페이스에는 'getMemberList'라는 메서드가 선언되어 있습니다. 이 메서드는 Mybatis mapper의 id로 선언했던 설정 값과 연동이 됩니다.
이렇게 매퍼 인터페이스를 정의하면 Mybatis가 해당 인터페이스의 메서드와 XML 파일을 매핑하여 데이터베이스와의 상호작용을 수행할 수 있습니다.
3. 사용자 목록 조회 서비스
public class MemberServiceImpl {
@Autowired
private MemberMapper memberMapper;
/**
* 사용자 목록 조회 service
*
*/
public List<Member> getMemberList() {
// IN절을 조회할 memberId 리스트
List<Integer> memberIds = Arrays.asList(1, 2, 3, 4, 5);
// 사용자 목록 조회
List<Member> memberList = memberMapper.getMemberList(memberIds);
return memberList;
}
}
위의 소스 코드는 사용자 목록을 조회하기 위한 서비스 클래스입니다.
위의 클래스에서는 @Autowired 어노테이션을 사용하여 'MemberMapper' 인터페이스를 주입받고 이를 통해 Mybatis와 연동되어 있는 인터페이스를 사용할 수 있게 됩니다.
가장 먼저, 'memberIds'라는 List<Integer>' 변수에 조회할 사용자의 'memberId' 리스트를 정의합니다. 그 후, 'memberMapper.getMemberList(memberIds)'를 호출하여 'MemberMapper' 인터페이스의 'getMemberList()' 메서드를 실행합니다. 이때, 'memberIds'를 파라미터로 전달하여 쿼리의 IN절 처리를 수행하게 됩니다.
이렇게 'MemberServiceImpl' 클래스에서 'MemberMapper' 인터페이스를 활용하여 사용자 목록을 조회하는 기능을 구현하고 있습니다.
최종 정리
오늘은 MyBatis에서 IN 절 쿼리를 작성할 때 'foreach' 태그를 활용하는 방법에 대해 간단하게 정리해보았습니다.
이 방법은 MySQL, Oracle, PostgreSQL 등과 같이 다양한 데이터베이스와 연동이 가능하며, 'foreach' 뿐만 아니라 다양한 태그들을 활용하여 MyBatis의 장점을 최대한 활용할 수 있습니다. MyBatis를 사용하면 동적 SQL을 구성하여 유연한 쿼리를 작성할 수 있으며, 이를 통해 간단하고 효율적으로 기능을 구현할 수 있습니다.
다양한 태그들을 활용하는 것으로 더 많은 데이터베이스 기능을 활용할 수 있으니, MyBatis의 다양한 태그들을 익히고 활용하는 것을 권장합니다. 이를 통해 개발을 더욱 편리하고 효과적으로 할 수 있습니다.
그럼 오늘도 저의 글을 읽어주셔서 감사합니다!

'Java > Mybatis' 카테고리의 다른 글
| [Mybatis] 마이바티스 컬럼 자동 매핑하기 (auto mapping) (0) | 2023.02.21 |
|---|---|
| [Mybatis] 마이바티스 동적 쿼리 trim 사용하기 (0) | 2023.02.20 |
| [Mybatis] 마이바티스 where 태그 사용하기 (0) | 2023.02.18 |
| [Mybatis] 마이바티스 sql과 include 사용하기 (0) | 2023.02.17 |
| Mybatis '요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다' 에러 해결하기 (0) | 2023.02.11 |