Mybatis의 Collection 기능
1:1 관계를 맺고 있는 테이블에서는 JOIN 하여 두 개의 테이블 레코드를 한번에 조회 할수 있다.
하지만 1:N 관계의 테이블에서 JOIN하여 레코드를 조회하려고 할 때
1개의 레코드를 가지는 테이블의 정보는 모두 조회되지만, N개의 레코드를 가지는 테이블의 정보는 첫번째 값만 조회되거나 오류가 발생한다.
N개의 레코드 모두 조회하고 싶은 경우에는 Mybatis에서 제공하는 resultMap에 collection기능을 사용하면 된다.
예시
사용자(1)가 구매한 상품 내역(N)을 조회하는 예시로 collection 사용방법을 알아보자.
기존 방법
테스트용 테이블로 user 테이블과 buy_item 테이블이 있다고 했을때,
collection을 사용하지 않는다면 N개의 레코드를 조회 하려고 해서 오류가 발생한다.
user 테이블
상품 구매 테이블
조회 쿼리
쿼리 실행 결과
ResultMap의 Collection 사용
ResultMap에 collection을 사용하면 N개 레코드 모두 조회가 가능하다.
문법은 resultMap 내부에 collection을 추가하고 result 부분에 N개로 조회되는 레코드의 컬럼값을 매핑해준다.
(column은 쿼리의 SELECT 절의 컬럼명을 적어주고, property는 로직에서 사용할 Map의 키값을 적어준다.)
그런 다음 DTO에 ResultMap Collection과 매핑시켜주기 위한 변수를 List 타입으로만들어준다.
결과
사용자 정보 1쌍에 구매 정보 N건이 조회되서 리턴되는것을 확인 할수있다.
'Study > MyBatis' 카테고리의 다른 글
[Mybatis] XML파일에서 부등호 사용 방법 (CDATA) (0) | 2022.07.20 |
---|---|
[MyBatis] Mybatis 기본 개념 (0) | 2022.07.15 |