
MyBatis를 사용할 때 가장 자주 마주치는 설정이
ParameterType, ResultType, ResultMap 입니다.
이 세 가지는 모두 SQL과 자바 객체를 연결하는 핵심 요소이지만,
사용 목적과 적용 방식은 크게 다릅니다.
이번 글에서는 실무 기준으로 세 옵션의 차이를 한 번에 이해할 수 있도록 정리해보겠습니다.
1. MyBatis에서 타입 매핑이 중요한 이유
MyBatis는 SQL 기반 프레임워크이기 때문에
자바 코드와 SQL 사이에서 데이터 타입을 정확하게 매핑해야 합니다.
타입 매핑이 잘못되면 다음과 같은 문제가 발생합니다.
- 파라미터 전달 오류
- 컬럼 값 매핑 오류
- 조인 시 객체 구조 불일치
- NullPointerException 발생
따라서 MyBatis에서 ParameterType, ResultType, ResultMap 을 정확히 이해하면
안정적이고 유지보수성 높은 SQL 코드를 작성할 수 있습니다.
2. ParameterType: SQL에 전달되는 입력 타입
parameterType은 쿼리 실행 시 전달되는 입력값의 타입을 정의합니다.
📘 예시
<select id="getUser" parameterType="Long" resultType="User">
SELECT * FROM USER WHERE id = #{id}
</select>
📌 특징
- 단일 값(String, Long 등) 가능
- DTO 객체도 전달 가능
- Map 형태로도 전달 가능
- 스프링에서는 타입 추론이 가능해 생략하는 경우도 많음
📌 실무 팁
- 파라미터가 여러 개일 때는 DTO 또는 @Param 사용을 권장합니다.
3. ResultType: 단순 조회 결과 매핑
resultType은 SELECT 결과를 단일 객체에 매핑할 때 사용됩니다.
📘 예시
<select id="getUsers" resultType="User">
SELECT id, name, age FROM USER
</select>
📌 특징
- 컬럼명과 객체 필드명이 동일할 때 가장 효율적
- 단일 테이블 조회에 적합
- 조인 구조가 복잡하면 표현이 어려움
📌 실무에서 자주 쓰이는 시나리오
- 리스트 조회
- 페이징 목록
- 단일 객체 조회
4. ResultMap: 복잡한 객체 매핑(조인, 컬렉션)
resultMap은 MyBatis에서 가장 강력한 매핑 기능입니다.
다음과 같은 구조에서 필수입니다.
- 1:1 매핑 (association)
- 1:N 매핑 (collection)
- 조인 결과 매핑
- 컬럼명 ≠ 필드명 구조
📘 예시: User + Address(1:1)
<resultMap id="userMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<association property="address" javaType="Address">
<result property="city" column="city"/>
</association>
</resultMap>
📘 예시: Order + OrderItems(1:N)
<collection property="items" ofType="OrderItem">
<id property="itemId" column="item_id"/>
<result property="quantity" column="quantity"/>
</collection>
📌 특징
- 복잡한 조인 구조에서도 DTO를 형태 그대로 매핑
- ORM처럼 중첩 객체를 표현 가능
- 컬렉션 매핑 시 성능 고려 필요
5. 세 가지 차이 요약 및 실무 선택 기준
| 구성 | 역할 | 사용 상황 |
| ParameterType | SQL 입력 파라미터 타입 | DTO 전달, 단일 값 전달 |
| ResultType | 단순 결과 매핑 | 단일 테이블 조회, 리스트 조회 |
| 단일 테이블 조회, 리스트 조회 | 복합 객체 매핑 | 조인, 1:1, 1:N 구조 |
- 단순한 조회이면 → ResultType
- 조인 또는 중첩 객체이면 → ResultMap
- 여러 파라미터 전달 → DTO + ParameterType 생략 가능
✅ 마무리
MyBatis의 ParameterType, ResultType, ResultMap은
각기 목적이 다른 타입 매핑 도구입니다.
세 가지의 역할을 명확히 구분하면 SQL과 자바 사이 데이터 흐름이 자연스럽고
에러 없는 안정적인 매핑을 구현할 수 있습니다.
- ParameterType → 입력값 전달
- ResultType → 단순 결과 매핑
- ResultMap → 복잡한 객체 구조 매핑
MyBatis를 사용하는 개발자라면 꼭 이해해야 할 기본이자 핵심 개념입니다.