장바구니 조회

사용자의 장바구니를 클릭하면 장바구니에 담아뒀던 CartItem과 ItemImg의 정보를 조회하도록 하겠습니다.
먼저 화면에 보낼 DTO 객체를 생성합니다.

DTO

CartDetailDto.Java

public class CartDetailDto {

    private Long cartItemId;
    private String itemNm;
    private int price;
    private int count;
    private String imgUrl;
...

Repository

CartItemRepository.Java

QueryDsl에 한번에 DTO 객체를 반환하는 것 말고도 JPQL의 쿼리문을 통해서 한번에 조회할 수 있습니다.
CartItem과 ItemImg 내부에 item이 모두 존재하니, Item을 join 하고 조건문에 이를 활용합니다.

@Query("select new com.growing.shop.dto.CartDetailDto(ci.id, i.itemNm, i.price, ci.count, im.imgUrl)"+
    "from CartItem ci, ItemImg im " +
    "join ci.item i " +
    "where ci.cart.id = :cartId " +
    "and im.item.id = ci.item.id " +
    "and im.repImgYn = 'Y' " +
    "order by ci.regTime desc")
List<CartDetailDto> findCartDetailDtoList(Long cartId);

Service

CartService.Java

email 정보만 받고 member 엔티티를 조회합니다. member 엔티티의 id를 통해서 Cart를 가져온 뒤, 바로 위에 만들어놨던 Repository의 메서드를 사용해서 DTO 객체를 조회 후 반환 해줍니다.

@Transactional(readOnly = true)
public List<CartDetailDto> getCartList(String email){

    List<CartDetailDto> cartDetailDtoList = new ArrayList<>();

    Member member = memberRepository.findByEmail(email);
    Cart cart = cartRepository.findByMemberId(member.getId());
    if(cart == null){
        return cartDetailDtoList;
    }
    cartDetailDtoList= cartItemRepository.findCartDetailDtoList(cart.getId());
    return  cartDetailDtoList;
}

Controller

CartController.Java

@GetMapping("/cart")
public String orderHist(Principal principal, Model model){
    List<CartDetailDto> cartDetailList= cartService.getCartList(principal.getName());
    model.addAttribute("cartItems", cartDetailList);
    return "cart/cartList";
}

좋은 웹페이지 즐겨찾기