[Mybatis] collection 결과 매핑 예제

<collection> 요소를 사용하여 MyBatis에서 컬렉션을 가진 객체들 간의 결과 매핑을 정의할 수 있습니다. 이를 통해 객체 간의 1:N 관계를 처리하고 결과를 매핑할 수 있습니다. 아래에 간단한 <collection> 결과 매핑 예제를 제공하겠습니다.

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

MyBatis에서 이를 구현하려면 다음과 같이 <collection> 요소를 사용할 수 있습니다.

<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>` 

위의 예제에서 <collection> 요소는 User 클래스와 Order 클래스 간의 컬렉션 매핑을 정의합니다. selectUserWithOrders 쿼리에서 resultMap 속성으로 이 매핑을 사용하면 사용자 정보와 해당 사용자의 주문 목록이 함께 매핑됩니다.

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