[Mybatis] association 결과 매핑 예제

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

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

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

<resultMap id="userWithProfileMap" type="your.package.User">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <result property="email" column="email"/>
    <association property="profile" javaType="your.package.UserProfile">
        <id property="profileId" column="profile_id"/>
        <result property="firstName" column="first_name"/>
        <result property="lastName" column="last_name"/>
    </association>
</resultMap>

<select id="selectUserWithProfile" resultMap="userWithProfileMap">
    SELECT u.id as user_id, u.username, u.email,
           p.id as profile_id, p.first_name, p.last_name
    FROM users u
    LEFT JOIN user_profiles p ON u.id = p.user_id
    WHERE u.id = #{userId}
</select>` 

위의 예제에서 <association> 요소는 User 클래스와 UserProfile 클래스 간의 관계를 정의합니다. selectUserWithProfile 쿼리에서 resultMap 속성으로 이 매핑을 사용하면 사용자 정보와 해당 사용자의 프로필 정보가 함께 매핑됩니다.

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