본문 바로가기
ㆍSpring & JSP

[스프링]쇼핑몰 / 장바구니 만들기 첫페이지 기능구현 완성!

by 매이슨 2021. 9. 10.

oven 으로 만든 스토리보드 여기까지 완성

BasketVO.java

<hide/>
package com.g3.domain;

import java.sql.Date;

public class BasketVO {

	private int b_num; // 장바구니 번호
	private String u_id; // 회원아이디
	private int b_p_num; // 상품번호
	private int b_p_amount; // 상품수량
	private String b_p_option; // 상품옵션
	private String b_p_price; // 상품가격
	private Date b_date; // 장반구니담은날짜
	public int getB_num() {
		return b_num;
	}
	public void setB_num(int b_num) {
		this.b_num = b_num;
	}
	public String getU_id() {
		return u_id;
	}
	public void setU_id(String u_id) {
		this.u_id = u_id;
	}
	public int getB_p_num() {
		return b_p_num;
	}
	public void setB_p_num(int b_p_num) {
		this.b_p_num = b_p_num;
	}
	public int getB_p_amount() {
		return b_p_amount;
	}
	public void setB_p_amount(int b_p_amount) {
		this.b_p_amount = b_p_amount;
	}
	public String getB_p_option() {
		return b_p_option;
	}
	public void setB_p_option(String b_p_option) {
		this.b_p_option = b_p_option;
	}
	public String getB_p_price() {
		return b_p_price;
	}
	public void setB_p_price(String b_p_price) {
		this.b_p_price = b_p_price;
	}
	public Date getB_date() {
		return b_date;
	}
	public void setB_date(Date b_date) {
		this.b_date = b_date;
	}
	@Override
	public String toString() {
		return "BasketVO [b_num=" + b_num + ", u_id=" + u_id + ", b_p_num=" + b_p_num + ", b_p_amount=" + b_p_amount
				+ ", b_p_option=" + b_p_option + ", b_p_price=" + b_p_price + ", b_date=" + b_date + "]";
	}
}

 


BasketService.java(interface)

package com.g3.service;

import java.util.List;

import com.g3.domain.Ad_ProductVO;

public interface BasketService {
	
	//새 장바구니 추가
	public void insertProductInBasket(Ad_ProductVO prod, String id);

	//장바구니 목록 조회(VasketVO + p_image(g3_product))
	public List basketList(String id);

	//찜목록 조회 (
	public List<Ad_ProductVO> getLikeList(String id);
}

BasketServiceImpl.java

package com.g3.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.g3.domain.Ad_ProductVO;
import com.g3.domain.BasketVO;
import com.g3.persistence.BasketDAO;

@Service
public class BasketServiceImpl implements BasketService{

	@Inject
	private BasketDAO bdao;

	//새로운 장바구니 담기
	@Override
	public void insertProductInBasket(Ad_ProductVO prod, String id) {
		// 장바구니 담기전 체크
		BasketVO bvo = bdao.checkBasket(prod, id);
		if(bvo.getB_p_amount()==0) { //장바구니에 상품&&옵션 없을시
			bdao.insertProductInBasket(prod, bdao.getNewBasketNumber(), id);
		}else if(bvo.getB_p_amount()>0){ //장바구니에 상품&&옵션 있을시
			bdao.updateAmountProductInBasket(prod, bvo);
		}
	}
	//장바구니 목록 조회(VasketVO + p_image(g3_product))
	@Override
	public List basketList(String id) {
		List basketList = bdao.getBasketList(id);
		return basketList;
	}
	//찜목록 조회
	@Override
	public List<Ad_ProductVO> getLikeList(String id) {
		// g3_user - u_like 컬럼 가져오기 (X)
		// image,price List
		List<Ad_ProductVO> likeList = bdao.getLike(id);
		return likeList;
	}
}

BasketDAO.java(interface)

package com.g3.persistence;

import java.util.List;

import com.g3.domain.Ad_ProductVO;
import com.g3.domain.BasketVO;

public interface BasketDAO {

	//새로운 장바구니 번호
	public int getNewBasketNumber();
	
	//장바구니 담기전 체크
	public BasketVO checkBasket(Ad_ProductVO prod, String id);
	
	//새로운 장바구니 추가
	public void insertProductInBasket(Ad_ProductVO prod, int newNumber, String id);

	//장바구니 수량추가
	public void updateAmountProductInBasket(Ad_ProductVO prod, BasketVO bvo);

	//장바구니 목록 조회(VasketVO + p_image(g3_product))
	public List getBasketList(String id);

	// g3_user - u_like 컬럼 가져오기 (X)
	// image,price List
	public List<Ad_ProductVO> getLike(String id);
	
}

BasketDAOImpl.java

package com.g3.persistence;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.g3.domain.Ad_ProductVO;
import com.g3.domain.BasketVO;

@Repository
public class BasketDAOImpl implements BasketDAO{

	
	// 디비연결 => 객체 의존주입 (root-context.xml)
	@Inject
	private SqlSession sqlSession;
	
	// basketMapper.xml 파일에 접근가능한 이름(주소)
	private static final String namespace = "com.g3.mapper.basketMapper.xml";

	//새로운 장바구니 번호
	@Override
	public int getNewBasketNumber() {
		// 현재 장바구니 b_num 의 최댓값을 받아와 +1 값으로 리턴하여
		// 새로운 basket row 생성 
		int result = sqlSession.selectOne(namespace+".getNewBasketNumber");
		return result+1;
	}

	//장바구니 담기전 체크 (b_num, b_p_amount return)
	@Override
	public BasketVO checkBasket(Ad_ProductVO prod, String id) {
		BasketVO bvo = sqlSession.selectOne(namespace+".checkBasket");
		return bvo;
	}

	//새로운 장바구니 추가
	@Override
	public void insertProductInBasket(Ad_ProductVO prod, int newNumber, String id) {
		sqlSession.insert(namespace+".insertProductInBasket");
	}
	
	//장바구니 수량추가
	@Override
	public void updateAmountProductInBasket(Ad_ProductVO prod, BasketVO bvo) {
		sqlSession.insert(namespace+".updateAmountProductInBasket");
	}

	//장바구니 목록 조회(VasketVO + p_image(g3_product))
	@Override
	public List getBasketList(String id) {
		List basketList = sqlSession.selectList(namespace+".basketList", id);
		return basketList;
	}

	//g3_user - u_like 컬럼 가져오기 였으나
	// 코드지운거 주석처리 깜빡함
	// 첨에는 likeArr배열에 차례대로 p_num,p_image,p_price
	// 저렇게 가져와서 split(",") 하려고 했는데
	// p_num 이 리턴해도 뷰페이지에서 필요하지않아
	// List 반환 해서 그대로 사용키로 변경
	@Override
	public List<Ad_ProductVO> getLike(String id) {
		String like = sqlSession.selectOne(namespace+".getLike",id);
		String[] likeArr = like.split(",");
		List<Ad_ProductVO> likeList = new ArrayList();
		for(int i=0 ; i<likeArr.length ; i++) {
			likeList.add(sqlSession.selectOne(namespace+"getImagePriceFromProduct",likeArr[i]));
		}
		return likeList;
	}
	
}

BasketMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
  <mapper namespace="com.g3.mapper.BasketMapper">
  
  	<!-- 새로운 장바구니 번호 -->
	<select id="getNewBasketNumber" resultType="int">
		select max(b_num)
		from g3_basket
	</select>
  	<!-- 장바구니 체크 -->
  	<select id="checkBasket" resultType= "com.g3.domain.BasketVO">
  		select b_num, b_p_amount from g3_basket
  		where u_id=#{u_id},b_p_num=#{prod.p_num}, b_p_option=#{prod.p_option}  		
  	</select>
  	
  	<!-- 새로운 장바구니 추가 -->
  	<insert id="insertProductInBasket">
			insert into g3_basket(b_num, u_id, b_p_num, b_p_amount, b_p_option, b_date)
		values(#{newBasketNumber}, #{u_id}, #{prod.p_num}, #{@@@@@@@@@@@@@@@AmounT}, #{prod.option}, now())
  	</insert>
  	  	<!-- amount tag name 'amount' 수정해야됨 amount 일지도? -->
  	
  	<!--  -->
  	<update id= "updateAmountProductInBasket">
		update g3_basket
		set b_p_amount=b_p_amount+#{bvo.b_p_amount}
		where b_num=#{b_num}
  	</update>
  	
  	
	<!-- 장바구니 목록 조회 -->
	<select id="basketList" resultType="List">
		select p.p_image, b.b_num, b.u_id, b_p_num, b_p_amount, b_p_option, b_p_price, b_date
		from g3_basket AS b
		join g3_product AS p
		on p.p_num = b.b_p_num
		where b.u_id = #{u_id}
	</select>  	

	<!-- like 컬럼 가져오기 -->
	<select id="getLike" resultType="string">
		select u_like from g3_user
		where u_id=#{u_id}
	</select>
	
	<!-- like 이미지 가격 가져오기 -->
	<select id= "getImagePriceFromProduct" resultType="ProductVO">
		select p_image,p_price from g3_product
		where p_num=#{likeArr}
	</select>
	
	
	
  </mapper>

 

ㄹㅇ머리털 다 빠지겠습니다... 첫 스프링 프로젝트
그래도 재밌게하고있습니다.

다 쓰고보니 controller 하나도 안했네요..

G3 로고 진짜 멋있게 잘 만든듯

 

아래는 저장용

<script>
	function ABCD(AAA) {
      $.ajax({
        type : "post",
        async : false,
        url : "#{contextPath}/콘트롤러 주소",
        data : { AAA : AAA }, // ?여기는 모르겟음 아마도 태그네임? 태그밸류?일듯
        success : function(data, textStatus) {
          if(data.trim()=='insert메시지'{
            alert('장바구니에 추가 되었습니다');
          }else if(data.trim()=='이미 장바구니 테이블에 있는 메시지'){
            alert('이미 장바구니에 등록된 ~~~');
          }
        }
      });
     } 
</script>