본문 바로가기
Mybatis/기본 매핑과 SQL 작성

결과 매핑 (resultType, resultMap)

by DEVLIB 2025. 4. 17.
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