본문 바로가기

전지적라온시점

MyBatis Mapper XML 완벽 이해 – resultType, parameterType, resultMap 차이 정리 본문

Development/Mybatis

MyBatis Mapper XML 완벽 이해 – resultType, parameterType, resultMap 차이 정리

최라온 2025. 5. 20. 11:40
728x90
반응형
SMALL

MyBatis Mapper XML 완벽 이해 – resultType, parameterType, resultMap 차이 정리

MyBatis는 SQL 매핑 중심의 프레임워크로, Mapper XML은 핵심 구성요소입니다. 특히 parameterType, resultType, resultMap은 쿼리와 자바 객체 간의 바인딩을 제어하는 데 필수입니다. 이 글에서는 각 속성의 개념과 차이점, 실무 적용 예제를 통해 완전히 이해할 수 있도록 정리합니다.

1. Mapper XML 기본 구조

<mapper namespace="com.example.mapper.UserMapper">
  ...
</mapper>

namespace는 Mapper 인터페이스의 FQCN(전체 클래스 경로)과 일치해야 합니다.

2. parameterType – SQL에 전달할 파라미터의 타입

parameterType은 쿼리에 전달되는 입력값의 자바 타입입니다. 자바의 기본형, String, DTO, Map 등을 사용할 수 있습니다.

예: 기본 타입 사용

<select id="selectUser" parameterType="long" resultType="User">
  SELECT * FROM users WHERE id = #{id}
</select>

예: 객체(DTO) 사용

<insert id="insertUser" parameterType="User">
  INSERT INTO users(name, age) VALUES(#{name}, #{age})
</insert>

예: Map 사용

<select id="searchUser" parameterType="map" resultType="User">
  SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>

3. resultType – 결과를 매핑할 클래스 타입

resultType은 쿼리 결과를 어떤 자바 객체로 반환할지를 지정합니다. 자바의 VO/DTO 클래스 또는 기본 타입, Map도 가능하며, 컬럼명과 필드명이 일치해야 자동 매핑됩니다.

예: 객체 자동 매핑

<select id="selectAll" resultType="User">
  SELECT id, name, age FROM users
</select>

예: Map으로 반환

<select id="selectAsMap" resultType="map">
  SELECT id, name FROM users
</select>

주의: 컬럼명과 자바 필드명이 다르면 resultMap을 사용해야 합니다.

4. resultMap – 복잡한 매핑 구조를 정의할 때 사용

resultMap은 컬럼명과 자바 필드명이 다르거나, 중첩 객체, 컬렉션을 매핑할 때 사용합니다. 가장 유연하고 강력한 결과 매핑 방식입니다.

예: 컬럼명과 필드명이 다를 경우

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="name" column="user_name" />
</resultMap>

<select id="selectCustom" resultMap="userResultMap">
  SELECT user_id, user_name FROM users
</select>

예: 중첩 객체 매핑

<resultMap id="orderMap" type="Order">
  <id property="id" column="order_id" />
  <association property="user" javaType="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
  </association>
</resultMap>

5. 정리 – 언제 무엇을 써야 할까?

속성 설명 추천 상황
parameterType SQL에 넘길 자바 객체 타입 기본형, DTO, Map 모두 가능
resultType 쿼리 결과를 받을 자바 객체 타입 컬럼명 = 필드명일 때
resultMap 정교한 결과 매핑 방식 중첩, 조인, 컬럼명 다를 때

6. 결론

MyBatis의 parameterType, resultType, resultMap은 SQL과 Java 객체를 연결하는 핵심 매핑 도구입니다. 각 속성의 차이점을 명확히 이해하고, 상황에 맞게 사용하는 것이 버그 없는 데이터 처리유지보수성 향상의 핵심입니다. 간단한 경우에는 resultType, 복잡한 매핑은 resultMap을 적극 활용하세요.

728x90
반응형
LIST