본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 쇼핑몰 - 33 사용자 계정 장바구니 목록 리스트 조회

by 환풍 2023. 4. 5.
728x90
반응형

이번엔 사용자 계정에 있는 장바구니 목록 리스트를 조회하는 것을 만들어보았다.


CartVO

cartVO에 상품 정보를 담기 위해서 itemVO가 필요해서 VO에 ItemVO 객체를 넣어주었다.

이렇게 하면 CartVO에서 ItemVO를 get하여 호출할 수 있다.

cart-mapper.xml

Association

Association은 has one 관계를 설정할 수 있다.

즉, Cart- Item은 1 - N 관계이다. 아이템 입장에서 장바구니는 하나만 존재한다.

따라서, MyBatis 내 resultMap 내부에서 association을 활용해 데이터를 가져올 수 있다.

 

AttachedFileName은 ITEM_IMG에서 끌어온다.

총 가격은 ITEM_PRICE * CART_CNT AS TOTAL_PRICE 을 사용했다.

CartVO는 이미 itemVO에 연결되어 있는데,

itemVO는 또 imgVO로 연결되어 있기 때문에, 쿼리문에있는 ATTACHED_FILE_NAME을 가져올 수 있는 것이다.

TOTAL_PRICE는 어쩔수 없이 resultMap에 추가해줘야한다.

cart-mapper , CartVO

resultMap에 만들어주고, VO에도 추가해줬다.

CartService 인터페이스, 클래스

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 VO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o  void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : VO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<VO> 객체.

 

CartController 컨트롤러

컨트롤러에서는 장바구니 페이지로 이동하면서 login 정보를 담아가야 해당 사용자 개인의 장바구니로 이동한다.

따라서, session에 담긴 loginInfo 데이터를 장바구니에서 조회한 장바구니 목록 조회 쿼리문에 memId를 넣어준다.

이 데이터를 넣기 위해선 model이라는 객체도 필요해서 함께 매개변수로 넣어주었다.

cart.html

컨트롤러에서 cartList라는 이름으로 넘겨주었고, html에서 cart라는 이름으로 반복을 돌렸다.

여기서 아이템 이미지는 CartVO 안에 있는 itemVO의 객체에 담긴 itemName을 뽑아줘야하므로,

$[[cart.itemVO.itemName]]으로 이미지를 뽑을 수 있다.

 

위 코드까지 마무리한 html 화면.

CartController 컨트롤러

장바구니 상품 목록 리스트 아래에 구매 버튼과 삭제 버튼을 추가했고, 총 구매 금액을 표시해보았다.

div class="offset-10 col-1">d</div>

offset-10은 총 12칸중 10칸은 띄우고 시작하겠다는 의미이다.

 

컨트롤러에서 cartService 쿼리를 바로 model에 넣어준 것을 뺀 뒤 cartList 변수에 저장한 다음 준 다음,

아래에 총 구매 금액 계산 변수를 cartList 값에 추가해주고 html에서 빼서 사용할 수 있게 해주었다.

 

이렇게 총 구매금액까지 html에 조회한 결과를 나타내보았다. 

 

다음 포스팅에서는 중복된 상품들이 하나로 계속 조회가 되는데, 이를 합쳐보는 기능을 구현해보자.

 

728x90
반응형

댓글