장바구니 목록 페이지에 출력할 장바구니 상품을 조회하는 쿼리문에 대해서 학교 수업 및 정보처리기사 DB 부분에서 학습한 내용을 바탕으로 이해하려고 했으나 정확하게 이해되지 않아서 정리해봄
// CartItem 테이블과 ItemImg 테이블의 속성값들을 조회
"from CartItem ci, ItemImg im"
// CartItem 의 외래키인 Item 테이블의 속성 또한 조회
"join ci.item i"
// CartItem 테이블에서 cart_id 속성값이 cartId 인 CartItem 만 조회
"where ci.cart.id = :cartId"
// 위에서 조회된 CartItem 들의 item_id 값을 item_id 속성값으로 갖는 itemImg 만 조회
"and im.item.id = ci.item.id"
// 위에서 조회된 item_img 중에서 repimYn 속성값이 "Y" 인 itemImg 만 조회
"and im.repimgYn = 'Y'"
// CartItem 조회 결과는 regTime 을 기준으로 내림차순 정렬
"order by ci.regTime desc"
즉, CartItem 테이블
과 CartItem 이 참조하고 있는 Item 테이블
, 그리고 ItemImg 테이블
을 조회하는데 CartItem 테이블에서는 cart_id 가 cartId 인 것들만 추출하고, itemImg 테이블에서는 앞에서 추출된 CartItem 의 item_id 값을 item_id 속성값으로 갖고, repimgYn 속성값이 "Y" 인 것들만 추출
// 위에서 추출된 CartItem 에서 id, count, Item 에서 itemName, price, ItemImg 에서 imgUrl
ci.id, i.itemName, i.price, ci.count, im.imgUrl
// 위에 것들을 생성자의 파라미터로 지정하여 CartListDto 객체 생성한 뒤에 반환
select new com.shop.dto.CartListDto
CartItem -> Item -> ItemImg 순으로 조인되며, where 절을 통해 추출된 결과를 이용하여 CartListDto 객체를 새롭게 생성한 뒤에 반환