[Mybatis] resultMap 결과 매핑 예제

resultMap은 MyBatis에서 더 복잡한 결과 매핑을 정의하는 데 사용되는 요소입니다. 주로 조인이나 다양한 매핑 시나리오에서 활용됩니다. 아래에 간단한 resultMap 결과 매핑 예제를 제공하겠습니다.

가령, “users” 테이블과 “orders” 테이블이 있을 때, 사용자와 해당 사용자의 주문 정보를 매핑하는 상황을 가정해봅시다. User 클래스는 사용자 정보를, Order 클래스는 주문 정보를 나타내는 클래스입니다.

MyBatis에서 이를 구현하려면 다음과 같이 resultMap을 사용할 수 있습니다.

<resultMap id="userWithOrdersMap" type="your.package.User">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <result property="email" column="email"/>
    <collection property="orders" ofType="your.package.Order">
        <id property="orderId" column="order_id"/>
        <result property="orderDate" column="order_date"/>
        <result property="totalAmount" column="total_amount"/>
    </collection>
</resultMap>

<select id="selectUserWithOrders" resultMap="userWithOrdersMap">
    SELECT u.id as user_id, u.username, u.email,
           o.id as order_id, o.order_date, o.total_amount
    FROM users u
    LEFT JOIN orders o ON u.id = o.user_id
    WHERE u.id = #{userId}
</select>` 

위의 예제에서 resultMapUser 클래스와 Order 클래스 간의 복합적인 매핑을 정의합니다. selectUserWithOrders 쿼리에서 resultMap 속성으로 이 매핑을 사용하면 사용자 정보와 해당 사용자의 주문 정보가 함께 매핑됩니다.

<collection> 요소를 사용하여 사용자의 주문 목록을 매핑하고 있습니다. 이를 통해 사용자 객체에 주문 정보가 컬렉션으로 포함됩니다.

이제 selectUserWithOrders 쿼리를 호출하면 사용자 정보와 해당 사용자의 주문 정보가 적절하게 매핑된 결과가 반환됩니다.