본문 바로가기
개발/Java

[Java] MyBatis 의 IN 쿼리 사용방법을 마스터 해봐요!

by 쓸있쏜 2024. 12. 11.
728x90

Java로 MyBatis IN 쿼리 마스터하기! 💻✨

여러분, MyBatis를 쓸 때 IN 쿼리 사용법에 대해 얼마나 알고 계신가요? 오늘은 이 IN 쿼리를 맛있게 요리하듯 다뤄볼게요. 어렵지 않아요! IN 쿼리는 생각보다 직관적이고, 데이터를 쏙쏙 골라내는 데 아주 유용하답니다. 자, 이제 재미있게 한 번 파헤쳐 보아요. 😊


IN 쿼리란 뭘까?

SQL에서 IN 키워드는 "이 값들 중 하나라도 포함되었니?" 하고 묻는 거예요. 마치 친구들 중 누구라도 초대됐는지 체크하는 느낌이랄까요. 예를 들어:

SELECT * FROM users WHERE id IN (1, 2, 3);

이 코드는 id가 1, 2, 3 중 하나인 users 테이블의 데이터를 가져오겠다는 뜻이에요. 간단하죠? 그런데 MyBatis에서는 어떻게 쓸까요?


MyBatis에서 IN 쿼리 사용하기 🎯

1. 일반적인 방법

MyBatis에서 가장 기본적인 IN 쿼리는 아래처럼 쓸 수 있어요.

매퍼 XML

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

와우, 복잡해 보이죠? 천천히 보면 foreach가 핵심이에요. idList라는 파라미터 리스트를 반복해서 #{id}로 바꿔주는 거예요. open, separator, close는 각각 괄호, 쉼표, 닫는 괄호를 다루죠.

파라미터 전달

Java 코드에서는 이렇게 리스트를 넘겨요.

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

이제 idList가 매퍼 XML의 idList로 들어가면서 쿼리가 완성돼요. 멋지죠?


주의할 점 🧐

  1. 빈 리스트 처리
    만약 idList가 비어 있다면?
SELECT * FROM users WHERE id IN ();

이렇게 쿼리가 망가져요! 이를 방지하려면 if 문을 추가해주는 게 좋아요.

<select id="selectUsersByIds" resultType="User">
  SELECT * FROM users
  <where>
    <if test="idList != null and idList.size > 0">
      id IN
      <foreach collection="idList" item="id" open="(" separator="," close=")">
        #{id}
      </foreach>
    </if>
  </where>
</select>
  1. 리스트 크기 제한
    DB마다 IN 조건에 넣을 수 있는 값의 개수가 제한될 수 있어요. MySQL은 약 1,000개까지 허용하니까, 데이터가 많으면 나눠서 쿼리해야 해요.

JSON 데이터를 활용한 변형 🛠️

또 다른 방법으로, JSON 데이터처럼 문자열로 리스트를 넘길 수도 있어요.

<select id="selectUsersByJsonIds" resultType="User">
  SELECT * FROM users WHERE FIND_IN_SET(id, #{idString});
</select>

여기서 idString은 "1,2,3" 형태로 넘겨주는 문자열이에요. Java에서 이렇게 준비할 수 있답니다.

String idString = String.join(",", Arrays.asList("1", "2", "3"));
List<User> users = userMapper.selectUsersByJsonIds(idString);

하지만 이 방법은 성능이 조금 떨어질 수 있다는 점, 잊지 마세요!


마무리 🎉

MyBatis에서 IN 쿼리를 사용하는 건 마치 레고를 조립하는 것 같아요. 처음엔 어지럽지만, 하나하나 맞추다 보면 멋진 작품이 완성돼요! 여러분도 이런 작은 팁으로 더 유연하고 강력한 코드를 작성할 수 있길 바랄게요. 앞으로 MyBatis의 다양한 기능들을 함께 더 탐험해봐요. 🚀

궁금한 점이 있다면 댓글로 남겨주세요! 🤗

 

728x90

댓글