
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을 적극 활용하세요.