📌 용도
복잡한 결과를 매핑 할때 사용하는 XML 태그, 중첩 객체나 List형태로 매핑할때 사용
예시) 객체 정보
class User {
int id;
String name;
String country;
Address address;
List<Order> orders;
}
class Address {
String mainAddress;
String subAddress;
}
class Order {
int orderId;
String orderItem;
}
1. <association>
1:1 관계 – 결과를 하나의 객체 필드에 매핑할 때 사용
1. 사용자 정보 조회 (단일 컬럼일 경우)
<resultMap id="userResultMap" type="User">
<association property="address" javaType="Address" select="selectAddressByUserId" column="id"/>
</resultMap>
<!-- 사용자 조회 쿼리 -->
<select id="selectUser" parameterType="User" resultMap="userResultMap">
SELECT
ID,
NAME
FROM USER
WHERE ID = #{id}
</select>
<!-- 사용자 주소 조회 쿼리 -->
<select id="selectAddressByUserId" resultType="Address">
SELECT
MAIN_ADDRESS,
SUB_ADDRESS
FROM ADDRESS
WHERE ID = #{id}
</select>
2. 사용자 정보 조회 (다중 컬럼일 경우)
<resultMap id="userResultMap" type="User">
<association property="address" javaType="Address" select="selectAddressByUserId" column="{id=id, country=country}"/>
</resultMap>
<!-- 사용자 조회 쿼리 -->
<select id="selectUser" parameterType="User" resultMap="userResultMap">
SELECT
ID,
NAME,
COUNTRY
FROM USER
WHERE ID = #{id}
</select>
<!-- 사용자 주소 조회 쿼리 -->
<select id="selectAddressByUserId" parameterType="User" resultType="Address">
SELECT
MAIN_ADDRESS,
SUB_ADDRESS
FROM ADDRESS
WHERE ID = #{id}
AND COUNTRY = #{country}
</select>
✅ 속성 정리
- property : User 클래스에 있는 필드명으로 결과가 매핑될 객체의 프로퍼티
- javaType : 매핑할 필드의 객체 타입 (property의 타입)
- select : 별도로 호출할 select 쿼리 id
- column : select 쿼리에 넘길 파라미터 (사용자 조회 쿼리에서 나온 결과중 id를 selectAddressByUserId에 넘김)
2. <collection>
1:N 관계 – 결과를 리스트(Collection) 필드에 매핑할 때 사용
1. 사용자 주문내역 조회 (단일 컬럼일 경우)
<resultMap id="userResultMap" type="User">
<collection property="orders" ofType="Order" select="selectOrdersByUserId" column="id"/>
</resultMap>
<!-- 사용자 조회 쿼리 -->
<select id="selectUser" parameterType="User" resultMap="userResultMap">
SELECT
ID,
NAME
FROM USER
WHERE ID = #{id}
</select>
<!-- 사용자 주문내역 조회 쿼리 -->
<select id="selectOrdersByUserId" resultType="Order">
SELECT
ORDER_ID,
ORDER_ITEM
FROM ORDER
WHERE ID = #{id}
</select>
2. 사용자 주문내역 조회 (다중 컬럼일 경우)
<resultMap id="userResultMap" type="User">
<collection property="orders" ofType="Order" select="selectOrdersByUserId" column="{id=id, country=country}"/>
</resultMap>
<!-- 사용자 조회 쿼리 -->
<select id="selectUser" parameterType="User" resultMap="userResultMap">
SELECT
ID,
NAME,
COUNTRY
FROM USER
WHERE ID = #{id}
</select>
<!-- 사용자 주문내역 조회 쿼리 -->
<select id="selectOrdersByUserId" parameterType="User" resultType="Order">
SELECT
ORDER_ID,
ORDER_ITEM
FROM ORDER
WHERE ID = #{id}
AND COUNTRY = #{country}
</select>
✅ 속성 정리
- property : User 클래스에 있는 필드명으로 결과가 매핑될 객체의 프로퍼티
- ofType : 컬렉션 내부에 들어가는 객체의 타입 -> List<Order> 에서 Order
- select : 별도로 호출할 select 쿼리 id
- column : select 쿼리에 넘길 파라미터 (사용자 조회 쿼리에서 나온 결과중 id를 selectOrdersByUserId에 넘김)
- javaType : 매핑할 필드의 객체 타입 (property의 타입, collection 에서는 생략가능)
'코딩' 카테고리의 다른 글
[Mybatis] 보조기능 태그 정리 (1) | 2025.06.30 |
---|---|
[Mybatis] 동적 SQL 정리 (0) | 2025.06.27 |
[JAVA] 추가 공부 정리 (1) | 2025.03.22 |
[Python] 행렬 미분 정리 (0) | 2025.02.19 |
[Python] 선형대수 정리 (0) | 2025.02.06 |