int 값이 2개 이상일 경우 표현하는 방법MyBatis에서 int 값을 두 개 이상 전달하려면, 일반적으로 Map, DTO (VO), @Param 어노테이션을 사용합니다.
@Param을 사용하는 방법 (가장 추천)MyBatis에서 여러 개의 int 값을 XML에 전달하려면 @Param을 사용하는 것이 가장 간단하고 가독성이 좋습니다.
@Mapper
public interface UserMapper {
List<User> getUsersByAgeAndScore(@Param("age") int age, @Param("score") int score);
}
<select id="getUsersByAgeAndScore" resultType="User">
SELECT * FROM users
WHERE age = #{age} AND score = #{score}
</select>
#{age}와 #{score}는 각각 @Param("age")와 @Param("score")에 매핑됩니다.@Param을 사용하면 XML에서 #{변수명}을 통해 값을 쉽게 사용할 수 있습니다.Map<String, Object>를 사용하는 방법@Param 대신 Map<String, Object>를 사용하여 여러 값을 전달할 수도 있습니다.
@Mapper
public interface UserMapper {
List<User> getUsersByParams(Map<String, Object> params);
}
<select id="getUsersByParams" resultType="User">
SELECT * FROM users
WHERE age = #{age} AND score = #{score}
</select>
Map<String, Object> params = new HashMap<>();
params.put("age", 25);
params.put("score", 80);
List<User> users = userMapper.getUsersByParams(params);
Map을 사용하면 age, score 이외에도 필요한 파라미터를 동적으로 추가할 수 있습니다.만약 전달할 값이 많거나, 관련된 데이터라면 DTO(VO)를 사용하는 것이 좋습니다.
public class UserFilter {
private int age;
private int score;
// Getter, Setter
}
@Mapper
public interface UserMapper {
List<User> getUsersByFilter(UserFilter filter);
}
<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);
| 방법 | 장점 | 단점 | 추천 여부 |
|---|---|---|---|
@Param 사용 | 간결하고 가독성 높음 | 2개 이상일 때만 사용 가능 | ✅ 가장 추천 |
Map<String, Object> 사용 | 동적으로 값을 추가할 수 있음 | key 값을 문자열로 지정해야 함 | ⚠ 특정 경우에만 |
| DTO(VO) 사용 | 가독성 및 유지보수 용이 | DTO 클래스를 추가로 만들어야 함 | ✅ 여러 개의 값이 있을 경우 추천 |
📌 2개 정도의 int 값을 전달한다면 @Param을 사용하세요.
📌 여러 개의 필터 조건을 사용할 경우 DTO를 만드는 것이 좋습니다. 🚀