본문 바로가기

안녕하세요!

프로그래밍 언어/JSP

JSP_22-12-08_[ 쇼핑몰 장바구니 ]_소스 코드 정리

[ 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
반응형

loading