Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하는원숭이

mybatis resultMap 활용 - join 본문

프로그래밍/DB/mysql/mybatis

mybatis resultMap 활용 - join

ssssssu 2017. 9. 29. 10:17

개발을 하다보면, 두 개 이상의 테이블을 join하여 결과를 가져와야 하는 경우가 많다.

일반적으로 하나의 테이블에 각 컬럼에 해당하는 vo(value object) 를 만들어 사용하는데, mybatis에서 하나의 쿼리로 두 개 이상의 테이블의 정보를 가져와야 할 때 vo를 어떻게 사용해야 할 지 애매하다.


이 때 mybatis의 resultMap을 사용하면 각 테이블 정보의 vo를 수정하지 않고 처리할 수 있다.


우선 조회해야 하는 테이블의 정보를 매핑한 vo 객체와 조회할 쿼리가 아래와 같다고 하자.


 - 테이블 TB_AAA

1
2
3
4
5
6
7
8
9
@Data
public class AaaVo {
 
    private int aaaUid;
    private String aaaCol1;
    private String aaaCol2;
    private String aaaCol3;

    private BbbVo bbbVo;
 
}
prcs


 - 테이블 TB_BBB

1
2
3
4
5
6
7
8
9
10
@Data
public class BbbVo {
 
    private int bbbUid;
private int aaaUid;
    private String bbbCol1;
    private String bbbCol2;
    private String bbbCol3;
 
}
cs


 - 쿼리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    a.AAA_UID
    , a.AAA_COL1
    , a.AAA_COL2
    , b.BBB_UID
    , b.BBB_COL1
FROM
    TB_AAA a
LEFT JOIN
    TB_BBB b
ON
    a.AAA_UID = b.AAA_UID
WHERE
    a.AAA_UID = 12345
cs



이 경우, mybatis에 아래와 같이 입력하여 사용하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<resultMap type="BbbVo" id="BbbVo">
    <result column="BBB_UID" property="bbbUid"/>
    <result column="BBB_COL1" property="bbbCol1"/>
</resultMap>
 
<resultMap type="AaaVo" id="AaaVo">
    <result column="AAA_UID" property="aaaUid"/>
    <result column="AAA_COL1" property="aaaCol1"/>
    <result column="AAA_COL2" property="aaaCol2"/>
    <collection property="bbbVo" resultMap="BbbVo"/>
</resultMap>
 
<select id="selectXXX" parameterType="AaaVo" resultMap="AaaVo">
    SELECT
        a.AAA_UID
        , a.AAA_COL1
        , a.AAA_COL2
        , b.BBB_UID
        , b.BBB_COL1
    FROM
        TB_AAA a
    LEFT JOIN
        TB_BBB b
    ON
        a.AAA_UID = b.AAA_UID
    WHERE
        a.AAA_UID = #{aaaUid}
</select>
cs


쿼리의 결과는 AaaVo 에 매핑되고, AaaVo 안의 BbbVo에 TB_BBB 테이블의 조회 결과가 매핑된다.





Comments