728x90
1. 단일값 파라미터
사용 예
- 기본 자료형: int, String, Long 등
XML 예시
<select id="selectUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
Java 인터페이스
User selectUserById(int id);
- #{id}: 파라미터명은 변수명과 같아야 함
- 단일값은 자동으로 매핑됨
2. Map 방식 (다중 파라미터)
사용 예
- 파라미터가 2개 이상일 때 간단하게 처리 가능
- 동적 조건이나 다이나믹 쿼리에 유용
XML 예시
<select id="selectUser" parameterType="map" resultType="User">
SELECT * FROM users
WHERE name = #{name} AND email = #{email}
</select>
Java 인터페이스
User selectUser(Map<String, Object> paramMap);
호출 예시
Map<String, Object> param = new HashMap<>();
param.put("name", "단비");
param.put("email", "danbi@email.com");
userMapper.selectUser(param);
#{name} → Map의 키 이름과 일치해야 함
3. DTO/VO 객체 방식
사용 예
- 파라미터가 많고 구조화되어 있을 때
- User, Product와 같은 도메인 객체 전달
XML 예시
<insert id="insertUser" parameterType="User">
INSERT INTO users (name, email)
VALUES (#{name}, #{email})
</insert>
Java 인터페이스
void insertUser(User user);
User 클래스 예시
public class User {
private String name;
private String email;
// getter/setter
}
- #{name}, #{email} → user.getName(), user.getEmail() 자동 매핑
언제 어떤 방식 써야 하나?
상황 | 추천 방식 |
파라미터가 1개인 단순 쿼리 | 단일값 |
파라미터가 2~3개지만 VO 만들기 애매함 | Map |
도메인 단위로 CRUD가 필요함 | DTO/VO 객체 |
파라미터 개수가 가변적 | Map (or @Param 조합) |
@Param 어노테이션
다중 파라미터를 객체 없이 넘기고 싶다면 @Param을 써서 이름 지정 가능해요:
@Select("SELECT * FROM users WHERE name = #{name} AND email = #{email}")
User selectUser(@Param("name") String name, @Param("email") String email);
마무리 요약
방식 | 특징 | 장점 | 단점 |
단일값 | 기본 타입 | 간단, 직관적 | 확장성 낮음 |
Map | 유동적 구조 | 유연성 높음 | 타입 안전성 ↓ |
DTO | 객체 기반 | 유지보수 좋음 | 객체 정의 필요 |
LIST
'Mybatis > 기본 매핑과 SQL 작성' 카테고리의 다른 글
결과 매핑 (resultType, resultMap) (0) | 2025.04.17 |
---|---|
select, insert, update, delete 쿼리 매핑 (0) | 2025.04.16 |
매퍼 인터페이스 vs 매퍼 XML (0) | 2025.04.16 |