[ CartDTO.java ]
○ 장바구니 구현 참고 ERD
- 테이블 member의 칼럼 id(기본키) ▶ 테이블 cart의 칼럼 id(외래키) ▶ 1:1
- 테이블 cart의 칼럼 cart_id(기본키) ▶ 테이블 cartItem의 칼럼 cart_id(외래키) ▶ 1:1:N
- 테이블 cartItem의 칼럼 product_id(외래키) ▶ 테이블 product의 칼럼 product_id ▶ 1:1:N:M
package com.daily.www.cart.dto;
import org.springframework.stereotype.Component;
import lombok.Data;
@Data
@Component("cartDTO")
public class CartDTO {
// ------------------------------------------------------------------------------------
// 테이블 cart 칼럼 ALL
// ------------------------------------------------------------------------------------
private int cartItem_id; // 장바구니 아이템 아이디(기본키)
private int id; // 회원 아이디(외래키)
private int cart_id; // 장바구니 아이디(외래키)
private int ci_number; // 상품 수량
private int product_id; // 상품 아이디(외래키)
// ------------------------------------------------------------------------------------
// 테이블 product 칼럼 중 활용 가능한 것들
// ------------------------------------------------------------------------------------
private String p_name; // 상품명
private int p_price; // 상품 금액
// ------------------------------------------------------------------------------------
// 포인트 점수 적립 변수
// ------------------------------------------------------------------------------------
private int point;
private int totalPoint;
public int getPoint() {
return point;
}
public int getTotalPoint() {
return totalPoint;
}
// ------------------------------------------------------------------------------------
// 포인트 점수 계산
// ------------------------------------------------------------------------------------
public void priceTotal() {
this.point = (int)(Math.floor(this.p_price*0.05));
this.totalPoint =this.point * this.ci_number;
}
}
[ CartController.java ]
○ 어노테이션
- @Resource
1) java 지원 어노테이션, 특정 프레임워크에 비종석적임
2) name => type => @Qualifier => fail
- @Autowired
1) Spring 지원 어노테이션
2) type => name => @Qualifier => fail
3) 주입 객체 타입 일치 여부 탐색 및 객체 자동 주입
- @Inject
1) java 지원 어노테이션, 특정 프레임워크에 비종석적임
2) Autowired와 찾는 순서가 다름
3) type => @Qualifier => name => fail
package com.daily.www.cart.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.daily.www.cart.dto.CartDTO;
import com.daily.www.cart.service.CartService;
@Controller
@RequestMapping(value = "/cart/*")
public class CartController {
private static final Logger logger = LoggerFactory.getLogger(CartController.class);
// ------------------------------------------------------------------------------------
// [ CartService.java 의존성 주입 ]
//
// @Resource : java 지원 어노테이션, 특정 프레임워크에 비종석적임
// name => type => @Qualifier => fail
//
// @Autowired : Spring 지원 어노테이션
// type => name => @Qualifier => fail
// 주입 객체 타입 일치 여부 탐색 및 객체 자동 주입
//
// @Inject : java 지원 어노테이션, 특정 프레임워크에 비종석적임
// Autowired와 찾는 순서가 다름
// type => @Qualifier => name => fail
// ------------------------------------------------------------------------------------
@Autowired
private CartService cartService;
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 화면 불러오기(cartForm) ]
//
// @RequestMapping : 특정 uri로 요청을 보냈을 때, Controller에서 어떠한 방식으로 처리할지 정의
// 이때 들어온 요청을 특정 메서드와 매핑하기 위해 사용
// value : 요청 받을 url 설정
// method : GET, POST, PUT, DELETE 등
// GET : SELECT 기능, 고정 주소 및 링크에 사용, 캐시 有
// POST : UPDATE, DELETE, INSERT 기능, URL 길이 한계 해결, 캐시 無
// 배열 지정을 통해 다중 요청 가능
//-----------------------------------------------------------------------------------------------------------
@RequestMapping(value = "/cartForm", method = RequestMethod.GET)
public String cartForm(CartDTO cartDTO, String cart_id, Model model) {
logger.info("CartController 장바구니 화면 불러오기.....");
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 목록 불러오기(cartAll) ]
//
// model : Controller에서 생성한 데이터를 담아 View로 전달할 때 사용하는 객체
// Servlet request.setAttribute()와 유사함
// addAttribute("키", "값") 메소드를 사용해 전달할 데이터 세팅
//-----------------------------------------------------------------------------------------------------------
// 아직 테이블 member의 id가 로그인 돼 있지 않으므로 임의로 cart_id를 '1'로 지정
cart_id = "1";
// 추가된 장바구니 목록을 보여주기 위해 해당 cart의 특정 cart_id 불러오기(추후 테이블member의 id와 연결할 것임)
cartService.getCartList(cart_id);
// model 객체를 통해 데이터 저장
// "cart_info"를 키로 지정
// cartService의 getCartList에 cart_id를 파라미터로 설정해 데이터 전달
model.addAttribute("cartInfo", cartService.getCartList(cart_id));
return "/cart/cartForm";
}
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니에 담기(addCart) ]
//
// @PostMapping : 테이블 cartItem에 테이블 product의 데이터를 INSERT
//-----------------------------------------------------------------------------------------------------------
@PostMapping("/cart/add")
@ResponseBody
public String addCartPOST(CartDTO cartDTO) {
logger.info("CartController 장바구니에 상품 추가하기.....");
// int로 result 타입 지정
// cartService에 addCart로 데이터 전달
int result = cartService.addCart(cartDTO);
return result + "";
}
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 수량 수정(modifyCount) ]
//
// @PostMapping : 테이블 cartItem의 ci_number를 UPDATE
//-----------------------------------------------------------------------------------------------------------
@PostMapping("/cart/update")
public String updateCartPOST(CartDTO cartDTO) {
cartService.modifyCount(cartDTO);
// 변경된 수량 데이터 저장 후, 다시 장바구니 페이지로 돌아옴
// 테이블 member의 id로 연결할 예정
return "redirect:/cart/cartForm";
}
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 삭제(deleteCart) ]
//
// @PostMapping : 테이블 cartItem의 특정 cartItem_id가 지니고 있는 데이터 DELETE
//-----------------------------------------------------------------------------------------------------------
@PostMapping("/cart/delete")
public String deleteCartPOST(CartDTO cartDTO) {
cartService.deleteCart(cartDTO.getCartItem_id());
// 변경된 수량 데이터 저장 후, 다시 장바구니 페이지로 돌아옴
// 테이블 member의 id로 연결할 예정
return "redirect:/cart/cartForm";
}
[ CartService.java ]
package com.daily.www.cart.service;
import java.util.List;
import com.daily.www.cart.dto.CartDTO;
public interface CartService {
// -----------------------------------------------------------------
// [ 장바구니 추가(addCart) ]
// -----------------------------------------------------------------
public int addCart(CartDTO cartDTO);
// -----------------------------------------------------------------
// [ 장바구니 정보 리스트(cartAll) ]
// -----------------------------------------------------------------
public List<CartDTO> getCartList(String cart_id);
// -----------------------------------------------------------------
// [ 장바구니 수량 수정(modifyCount) ]
// -----------------------------------------------------------------
public int modifyCount(CartDTO cartDTO);
// -----------------------------------------------------------------
// [ 장바구니 삭제(deleteCart) ]
// -----------------------------------------------------------------
public int deleteCart(int cartItem_id);
}
[ CartServiceImpl.java ]
package com.daily.www.cart.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.daily.www.cart.dao.CartDAO;
import com.daily.www.cart.dto.CartDTO;
@Service
public class CartServiceImpl implements CartService {
@Inject
private CartDAO cartDAO;
// -----------------------------------------------------------------
// [ 장바구니 추가(addCart) ]
// -----------------------------------------------------------------
@Override
public int addCart(CartDTO cartDTO) {
// 등록하고자 하는 데이터가 이미 DB에 존재하는지 확인
CartDTO checkCart = cartDAO.checkCart(cartDTO);
// 장바구니에 같은 상품이 있을 때 2를 반환
if(checkCart != null) {
return 2;
}
// 장바구니에 같은 상품이 없고, 다른 error 사항이 없을 때 상품을 장바구니에 추가
try {
return cartDAO.addCart(cartDTO);
} catch(Exception e) {
return 0;
}
}
// -----------------------------------------------------------------
// [ 장바구니 리스트(cartAll) ]
// -----------------------------------------------------------------
@Override
public List<CartDTO> getCartList(String cart_id) {
// 현재는 cart_id로 연결돼 있지만, 추후 테이블 member의 id와 연결할 예정
List<CartDTO> cartDTO = cartDAO.getCart(cart_id);
// 포인트 점수 적립을 for문을 통해 추가되는 상품에 따라 계속해서 더해주기
for(CartDTO dto : cartDTO) {
dto.priceTotal();
}
return cartDTO;
}
// -----------------------------------------------------------------
// [ 장바구니 수량 수정(modifyCount) ]
// -----------------------------------------------------------------
@Override
public int modifyCount(CartDTO cartDTO) {
return cartDAO.modifyCount(cartDTO);
}
// -----------------------------------------------------------------
// [ 장바구니 삭제(deleteCart) ]
// -----------------------------------------------------------------
@Override
public int deleteCart(int cartItem_id) {
return cartDAO.deleteCart(cartItem_id);
}
}
[ CartDAO.java ]
package com.daily.www.cart.dao;
import java.util.List;
import com.daily.www.cart.dto.CartDTO;
public interface CartDAO {
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 추가(addCart) ]
//-----------------------------------------------------------------------------------------------------------
public int addCart(CartDTO cartDTO) throws Exception;
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 목록(cartAll) ]
//-----------------------------------------------------------------------------------------------------------
public List<CartDTO> getCart(String cart_id);
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 확인(checkCart) ]
//-----------------------------------------------------------------------------------------------------------
public CartDTO checkCart(CartDTO cartDTO);
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 수량 수정(modifyCount) ]
//-----------------------------------------------------------------------------------------------------------
public int modifyCount(CartDTO cartDTO);
//-----------------------------------------------------------------------------------------------------------
// [ 장바구니 삭제(deleteCart) ]
//-----------------------------------------------------------------------------------------------------------
public int deleteCart(int cartItem_id);
}
728x90
반응형
'프로그래밍 언어 > JSP' 카테고리의 다른 글
JSP_22-12-15_[쇼핑몰 만들기_장바구니 리스트_주문하기로 데이터 전송] (0) | 2022.12.15 |
---|---|
JSP_22-12-14_[쇼핑몰 만들기_장바구니 이미지 나열] (0) | 2022.12.14 |
JSP_22-12-06_[ 쇼핑몰 만들기_장바구니 ] (0) | 2022.12.06 |
JSP_22-11-28_[상품 이미지 업로드] (0) | 2022.11.28 |