코딩하는원숭이
mybatis resultMap 활용 - join 본문
개발을 하다보면, 두 개 이상의 테이블을 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 테이블의 조회 결과가 매핑된다.
'프로그래밍 > DB/mysql/mybatis' 카테고리의 다른 글
mysql 현재 실행중인 쿼리 확인 및 강제종료 (deadlock 해결) (0) | 2018.02.09 |
---|
Comments