728x90
1. resultType: 간단하고 직관적인 결과 매핑
설명
- SQL 결과를 특정 클래스에 자동으로 매핑해주는 방식
- 컬럼명과 자바 객체 필드명이 정확히 일치해야 정상 작동해요
XML 예시
<select id="getUser" resultType="User">
SELECT id, name, email FROM users WHERE id = #{id}
</select>
매핑 대상 클래스
public class User {
private int id;
private String name;
private String email;
// getter, setter
}
주의사항
- DB 컬럼명이 user_name, Java 필드명이 userName일 경우 mapUnderscoreToCamelCase 설정 필요:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
간단한 쿼리에는 resultType이 충분합니다!
2. resultMap: 복잡한 결과 매핑에 사용하는 방식
설명
- 컬럼명과 필드명이 다르거나,
- 조인 결과(1:1, 1:N), 중첩 객체 등 복잡한 매핑이 필요할 때 사용
XML 예시: 컬럼명과 필드명이 다를 때
<resultMap id="userMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
<select id="getUser" resultMap="userMap">
SELECT user_id, user_name, user_email FROM users WHERE user_id = #{id}
</select>
XML 예시: 중첩 객체 (association)
<resultMap id="orderMap" type="Order">
<id property="id" column="order_id"/>
<result property="orderDate" column="order_date"/>
<association property="user" javaType="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
</association>
</resultMap>
association: 1:1 관계
collection: 1:N 관계
언제 resultMap을 써야 하나요?
상황 | 사용 방식 |
컬럼명 = 필드명 | resultType |
컬럼명 ≠ 필드명 | resultMap |
조인 결과 매핑 | resultMap |
중첩 객체 (VO 안에 VO) | resultMap |
컬렉션/리스트 포함 | resultMap + collection |
실전
- resultMap은 XML이 조금 길어지지만 유지보수와 명확한 매핑에는 매우 유리합니다.
- 실무에서 JPA 대신 MyBatis를 쓰는 이유 중 하나가 복잡한 결과 매핑이 쉬워서예요.
마무리 정리
구분 | 설명 | 특징 |
resultType | 결과를 단순 매핑 | 컬럼명과 필드명이 일치해야 함 |
resultMap | 결과를 정밀 매핑 | 복잡한 구조, 조인, 컬렉션에 적합 |
LIST
'Mybatis > 기본 매핑과 SQL 작성' 카테고리의 다른 글
파라미터 전달 방식 (단일값, Map, DTO) (1) | 2025.04.16 |
---|---|
select, insert, update, delete 쿼리 매핑 (0) | 2025.04.16 |
매퍼 인터페이스 vs 매퍼 XML (0) | 2025.04.16 |