본문 바로가기
카테고리 없음

MyBatis 타입매핑 Parameter Result 정리

by 기록하는 거부기 2025. 11. 27.

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를 사용하는 개발자라면 꼭 이해해야 할 기본이자 핵심 개념입니다.