MyBatis XML에서 int 값이 2개 이상일 경우 표현하는 방법

백엔드&인프라 추종자·2025년 2월 21일

스프링 공부

목록 보기
7/35

✅ MyBatis XML에서 int 값이 2개 이상일 경우 표현하는 방법

MyBatis에서 int 값을 두 개 이상 전달하려면, 일반적으로 Map, DTO (VO), @Param 어노테이션을 사용합니다.


1️⃣ @Param을 사용하는 방법 (가장 추천)

MyBatis에서 여러 개의 int 값을 XML에 전달하려면 @Param을 사용하는 것이 가장 간단하고 가독성이 좋습니다.

🔹 Mapper 인터페이스

@Mapper
public interface UserMapper {
    List<User> getUsersByAgeAndScore(@Param("age") int age, @Param("score") int score);
}

🔹 MyBatis XML

<select id="getUsersByAgeAndScore" resultType="User">
    SELECT * FROM users
    WHERE age = #{age} AND score = #{score}
</select>
  • #{age}#{score}는 각각 @Param("age")@Param("score")에 매핑됩니다.
  • @Param을 사용하면 XML에서 #{변수명}을 통해 값을 쉽게 사용할 수 있습니다.

2️⃣ Map<String, Object>를 사용하는 방법

@Param 대신 Map<String, Object>를 사용하여 여러 값을 전달할 수도 있습니다.

🔹 Mapper 인터페이스

@Mapper
public interface UserMapper {
    List<User> getUsersByParams(Map<String, Object> params);
}

🔹 MyBatis XML

<select id="getUsersByParams" resultType="User">
    SELECT * FROM users
    WHERE age = #{age} AND score = #{score}
</select>

🔹 호출 코드 (Service 또는 Controller)

Map<String, Object> params = new HashMap<>();
params.put("age", 25);
params.put("score", 80);

List<User> users = userMapper.getUsersByParams(params);
  • Map을 사용하면 age, score 이외에도 필요한 파라미터를 동적으로 추가할 수 있습니다.

3️⃣ DTO(VO)를 사용하는 방법

만약 전달할 값이 많거나, 관련된 데이터라면 DTO(VO)를 사용하는 것이 좋습니다.

🔹 DTO 클래스

public class UserFilter {
    private int age;
    private int score;

    // Getter, Setter
}

🔹 Mapper 인터페이스

@Mapper
public interface UserMapper {
    List<User> getUsersByFilter(UserFilter filter);
}

🔹 MyBatis XML

<select id="getUsersByFilter" resultType="User">
    SELECT * FROM users
    WHERE age = #{age} AND score = #{score}
</select>

🔹 호출 코드

UserFilter filter = new UserFilter();
filter.setAge(25);
filter.setScore(80);

List<User> users = userMapper.getUsersByFilter(filter);
  • DTO를 사용하면 코드의 가독성이 좋아지고, 유지보수성이 향상됩니다.

🔥 결론: 어떤 방법을 선택해야 할까?

방법장점단점추천 여부
@Param 사용간결하고 가독성 높음2개 이상일 때만 사용 가능✅ 가장 추천
Map<String, Object> 사용동적으로 값을 추가할 수 있음key 값을 문자열로 지정해야 함⚠ 특정 경우에만
DTO(VO) 사용가독성 및 유지보수 용이DTO 클래스를 추가로 만들어야 함✅ 여러 개의 값이 있을 경우 추천

📌 2개 정도의 int 값을 전달한다면 @Param을 사용하세요.
📌 여러 개의 필터 조건을 사용할 경우 DTO를 만드는 것이 좋습니다. 🚀

profile
AI 답변 글을 주로 올립니다.

0개의 댓글