728x90
1:1 조인 결과 매핑 (association 사용)
예시: Order 객체 안에 User 정보 포함
데이터 관계
- orders 테이블: 주문 정보 (order_id, user_id, order_date)
- users 테이블: 사용자 정보 (id, name, email)
XML: resultMap + association
<resultMap id="orderResultMap" type="Order">
<id property="orderId" column="order_id"/>
<result property="orderDate" column="order_date"/>
<association property="user" javaType="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</association>
</resultMap>
<select id="selectOrders" resultMap="orderResultMap">
SELECT o.order_id, o.order_date,
u.id AS user_id, u.name AS user_name, u.email AS user_email
FROM orders o
JOIN users u ON o.user_id = u.id
</select>
Java 객체
public class Order {
private int orderId;
private Date orderDate;
private User user;
// getter/setter
}
public class User {
private int id;
private String name;
private String email;
// getter/setter
}
association은 1:1 관계일 때 내부 객체로 매핑해줍니다.
1:N 조인 결과 매핑 (collection 사용)
예시: User 객체 안에 List<Order> 포함
데이터 관계
- 한 명의 사용자(User)는 여러 주문(Order)을 가질 수 있음
XML: resultMap + collection
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
<collection property="orders" ofType="Order">
<id property="orderId" column="order_id"/>
<result property="orderDate" column="order_date"/>
</collection>
</resultMap>
<select id="selectUsersWithOrders" resultMap="userResultMap">
SELECT u.id AS user_id, u.name AS user_name, u.email AS user_email,
o.order_id, o.order_date
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
</select>
Java 객체
public class User {
private int id;
private String name;
private String email;
private List<Order> orders;
// getter/setter
}
public class Order {
private int orderId;
private Date orderDate;
// getter/setter
}
collection은 1:N 관계일 때 리스트 형태로 매핑해줍니다.
주의할 점
| 항목 | 주의사항 |
| 컬럼명 중복 | 반드시 AS 별칭으로 충돌 방지 (예: u.id AS user_id) |
| SQL 결과 중복 | 조인으로 인해 중복 row가 많아져도 MyBatis가 자동 그룹핑 |
| 성능 | 큰 테이블 조인 시에는 N+1 문제가 발생하지 않도록 JOIN + collection을 적절히 설계해야 합니다. |
요약 정리
| 관계 | MyBatis | 태그목적 |
| 1:1 | <association> | 내부 객체 하나로 매핑 |
| 1:N | <collection> | 리스트 형태로 매핑 |
LIST
'Mybatis > 고급 매핑 기법' 카테고리의 다른 글
| SQL 재사용 (<sql>, <include>) (0) | 2025.04.17 |
|---|---|
| 컬렉션 매핑 (collection, association) (0) | 2025.04.17 |
| 다중 파라미터 처리 (0) | 2025.04.17 |