상품상세보기 페이지에서 주문하기를 눌렀을때, 상품번호와 상품수량, 현재페이지번호를 가지고 넘어간다.
로그인이 안되어있으면 로그인을 하도록 login.mem요청을 하고
로그인이 되었으면 넘겨받은 상품번호와 페이지번호를 가지고 다시 돌아간다.
📁 WEB-INF/ product
💾 productDatilView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
productDetail.jsp <br>
<%=application.getRealPath("/resources")%> <br>
<%=application.getContextPath()%><br> <!-- /ex request.getContextPath() 와 같다.-->
<%=request.getContextPath()%><br><br><!-- /ex application.getContextPath()와 같다.-->
<center>
<h1><span>상품 상세보기 화면</span></h1>
<table border="1" width="500" height="400">
<tr>
<td rowspan=6>
<img height=70 width=70
src="<%=application.getContextPath()%>/resources/${pbean.image}">
<!-- 웹서버에 접근하기위한 경로설정 -->
<!-- /ex/resources/a.jpg
-> ex에 포함되어 있는 내용 C:\Spring_hbr\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\16_Spring_Mybatis_Products\resources
-->
</td>
<td align=center>상품명</td>
<td> ${pbean.name}</td>
</tr>
<tr>
<td>가격</td>
<td> ${pbean.price}</td>
</tr>
<tr>
<td>재고 수량</td>
<td> ${pbean.stock}</td>
</tr>
<tr>
<td>설명</td>
<td> ${pbean.contents}</td>
</tr>
<tr>
<td>주문 수량</td>
<td>
<form action="add.mall" method="post">
<input type="hidden" name="num" value="${pbean.num}">
<input type="hidden" name="pageNumber" value="${pageNumber }"/>
<input type="text" name="orderqty" value="1">
<input type="submit" value="주문">
</form>
</td>
</tr>
<!-- hidden으로 상품번호와 페이지번호를 넘겨서 로그인시 페이지 이동하게 한다. -->
<tr>
<td colspan="2" align="center">
<a href="list.prd?pageNumber=${param.pageNumber}">상품 리스트</a>
</td>
</tr>
</table>
</center>
<td>주문 수량</td>
<td>
<form action="add.mall" method="post">
<input type="hidden" name="num" value="${pbean.num}">
<input type="hidden" name="pageNumber" value="${pageNumber }"/>
<input type="text" name="orderqty" value="1">
<input type="submit" value="주문">
hidden으로 상품번호와 페이지번호를 넘겨서 로그인시 페이지 이동하게 한다.
주문하기를 누르면 add.mall을 요청하게 된다.
add.mall 요청을 받는CartAddController 로 이동하게 된다.
테이블에 따로 Orderqty 변수를 만들지 않았으므로, ProductBean에 변수를 만들고 getter, setter 해준다.
📁 product.model
💾 ProductBean
private int orderqty;
public int getOrderqty() {
return orderqty;
}
public void setOrderqty(int orderqty) {
this.orderqty = orderqty;
}
📁mall.controller
💾 CartAddController
package mall.controller;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import product.model.ProductBean;
@Controller
public class CartAddController {
private final String command ="/add.mall";
private final String getPage="";
@Autowired
ServletContext servletContext;
//add.mall 어디서 요청하는지??? productDetailView 에서 주문하기 눌렀을때 add.mall요청
@RequestMapping(command)
public String cart(ProductBean pbean, HttpSession session,
@RequestParam("pageNumber") String pageNumber
) {
//ProductBean을 가져온다.
//setNum, setOrderqty , setPageNumber
System.out.println("pbean.getNum:"+pbean.getNum());
System.out.println("pbean.getOrderqty():"+pbean.getOrderqty());
int pnum = pbean.getNum();
int oqty = pbean.getOrderqty();
//본격전 주문전 로그인 설정
if(session.getAttribute("loginInfo")==null) {
//로그인 안했을때
session.setAttribute("destination","redirect:/detail.prd?num="+pbean.getNum()+"&pageNumber="+pageNumber);
//로그인하면, datail.prd요청에 따라 DeatailContriller로 이동한다.
return "redirect:/loginForm.mem"; //로그인 안했으면 로그인하도록 이동한다.
}else {
//로그인했을때
}
return null;
}
📁WEB-INF / common
💾common.jsp
<!-- 로그인한 사람의 아이디를 넣는다 -->
접속자 아이디 : ${loginInfo.id }
<%--
${sessionScope.loginInfo.id }이 생략 되어 있다.로그인 세션으로 설정했음
el의 내장객체 (범위순서대로)
pageScope
requestScope
sessionScope
--%>
-로그인한 사람의 아이디를 넣는다
접속자 아이디 : ${loginInfo.id }
${loginInfo.id } 안에 ${sessionScope.loginInfo.id }이 생략 되어 있다.로그인 세션으로 설정했음
- el의 내장객체 (범위순서대로)
pageScope < requestScope < sessionScope
ProductList.jsp<br>
<a href="start.jsp">시작페이지</a>
<a href="logout.jsp">로그아웃</a> <!-- 여기서 모든 세션 다 해제 -->
로그아웃 설정할수 있게 링크를 걸어준다.
webapp에 logout.jsp 파일 만든다.
💾 logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
logout.jsp<br>
<%
session.invalidate(); //세션설정 해제
response.sendRedirect("start.jsp");//세션설정 해제되면 돌아간다.
%>
<%
session.invalidate(); - 세션설정 해제
response.sendRedirect("start.jsp"); - 세션설정 해제되면 돌아간다.
%>
📁mall.controller
💾 CartAddController
package mall.controller;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import mall.cart.MyCartList;
import product.model.ProductBean;
@Controller
public class CartAddController {
private final String command ="/add.mall";
private final String gotoPage="redirect:/list.mall";//장바구니를 담으면 요청한다.
@Autowired
ServletContext servletContext;
//add.mall 어디서 요청하는지??? productDetailView(상세보기) 에서 주문하기 눌렀을때 add.mall요청 - 상품번호, 주문수량, 페이지번호넘긴다.
@RequestMapping(command)
public String cart(ProductBean pbean, HttpSession session,
@RequestParam("pageNumber") String pageNumber
) {
//ProductBean을 가져온다.- 상품번호, 주문수량, 페이지번호
//setNum, setOrderqty , setPageNumber
System.out.println("pbean.getNum:"+pbean.getNum());
System.out.println("pbean.getOrderqty():"+pbean.getOrderqty());
int pnum = pbean.getNum();
int oqty = pbean.getOrderqty();
//본격전 주문전 로그인 설정
if(session.getAttribute("loginInfo")==null) {
//로그인 안했을때
session.setAttribute("destination","redirect:/detail.prd?num="+pbean.getNum()+"&pageNumber="+pageNumber);
//로그인하면, datail.prd요청에 따라 DeatailContriller로 이동한다.
return "redirect:/loginForm.mem"; //로그인 안했으면 로그인하도록 이동한다. MemberLoginController에서 요청
}else {
//로그인했을때 장바구니로 담아서 진행하게 한다.
//장바구니 하나 만들어서 계속 끌고 갈 수 있도록 session설정을 한다.
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
System.out.println("mycart:"+mycart); //
if(mycart==null) {
//장바구니 생성전
mycart = new MyCartList();
}
mycart.addOrder(pnum, oqty); //MyCartList에 addOrder에 담을 상품을 집어넣게 된다.
session.setAttribute("mycart", mycart); //mycart가 관리하는 MyCartList안에 HashMap이 세션설정이 된다.
return gotoPage;
}
@Autowired
ServletContext servletContext; -session 사용하기 위해서
- add.mall 어디서 요청하는지???
productDetailView(상세보기) 에서 주문하기 눌렀을때 add.mall요청→ 상품번호, 주문수량, 페이지번호넘긴다.
@RequestMapping(command)
public String cart(ProductBean pbean, HttpSession session,
@RequestParam("pageNumber") String pageNumber
) {
- ProductBean을 가져온다.(상품번호, 주문수량)
-ProductBean 대신에 RequestParam으로 가져와도 된다.
-setNum, setOrderqty , setPageNumber
int pnum = pbean.getNum();
int oqty = pbean.getOrderqty();
- 본격전 주문전 로그인 설정
if(session.getAttribute("loginInfo")==null) { //로그인 안했을때
session.setAttribute("destination","redirect:/detail.prd?num="+pbean.getNum()+"&pageNumber="+pageNumber);
- 로그인하면, datail.prd요청에 따라 DeatailContriller로 이동한다.
return "redirect:/loginForm.mem"; -로그인 안했으면 로그인하도록 이동한다. MemberLoginController에서 요청
}else {
- 로그인했을때 장바구니로 담아서 진행하게 한다.
-장바구니 하나 만들어서 계속 끌고 갈 수 있도록 session설정을 한다.
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
System.out.println("mycart:"+mycart); //
if(mycart==null) {
-장바구니 생성전
mycart = new MyCartList(); -MyCartList객체를 만들어 mycar변수로 관리한다.
}
mycart.addOrder(pnum, oqty); - MyCartList에 addOrder에 담을 상품을 집어넣게 된다.
session.setAttribute("mycart", mycart); - mycart가 관리하는 MyCartList안에 HashMap이 세션설정이 된다.
return gotoPage;
}
}
📁 mall.cart
💾 MyCartList
package mall.cart;
import java.util.HashMap;
import java.util.Map;
public class MyCartList { //장바구니 역할
private Map<Integer,Integer> orderlists = null; //Map<Integer,Integer> =상품번호(key),주문수량(value)
public MyCartList() {
//장바구니가 만들어지면 여기로 온다. CartAddController에서 온다.
orderlists = new HashMap<Integer,Integer>();
}
public void addOrder(int pnum, int oqty) {
//addOrder 메서드로 주문수량과 상품번호를 Map에 집어 넣겠다.
if(orderlists.containsKey(pnum)) { //같은 상품이 장바구니에 이미 있으면 누적한다.
//key중에 같은 상풍번호가 있으면 true
int orgqty =orderlists.get(pnum); //이미 담긴 상품번호를 가져온다.
orderlists.replace(pnum, orgqty+orgqty); //key=상품번호 ,value=orgqty에 누적되도록 orgqty를 더한다.
//map을 사용하면 같은번호의 상품을 담으면 덮어쓰기가 되어버리므로 put을 사용해도 된다.(put을 사용한다고 같은번호의 데이터가 또 들어오는것 아니다)
}else {
//장바구니에 없으면 새로 추가한다.
orderlists.put(pnum,oqty); //orderlists에 상품번호와 수량이 쌍으로 들어간다.
}
}
public Map<Integer, Integer> getAllOrderList() {
return orderlists;
}
}
private Map<Integer,Integer> orderlists = null;
- Map<Integer,Integer> =상품번호(key),주문수량(value)
public MyCartList() {
-장바구니가 만들어지면 여기로 온다. CartAddController에서 온다.
orderlists = new HashMap<Integer,Integer>();
}
public void addOrder(int pnum, int oqty) {
- addOrder 메서드로 주문수량과 상품번호를 Map에 집어 넣겠다.
if(orderlists.containsKey(pnum)) {
- 같은 상품이 장바구니에 이미 있으면 누적한다.
- key중에 같은 상풍번호가 있으면 true
int orgqty =orderlists.get(pnum); - 이미 담긴 상품번호를 가져온다.
orderlists.replace(pnum, orgqty+orgqty); - key=상품번호 ,value=orgqty에 누적되도록 orgqty를 더한다.
- map을 사용하면 같은번호의 상품을 담으면 덮어쓰기가 되어버리므로 put을 사용해도 된다.(put을 사용한다고 같은번호의 데이터가 또 들어오는것 아니다)
}else {
- 장바구니에 없으면 새로 추가한다.
orderlists.put(pnum,oqty); - orderlists에 상품번호와 수량이 쌍으로 들어간다.
}
}
public Map<Integer, Integer> getAllOrderList() {
return orderlists;
}
CartAddController 에서 gotoPage="redirect:/list.mall";//장바구니를 담으면 요청한다.
mallList.jsp으로 이동한다.
mallList.jsp으로 이동하는 CartListController를 생성한다.
📁mall.controller
💾 CartListController
package mall.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import mall.cart.MyCartList;
import mall.cart.ShppingInfo;
import product.model.ProductBean;
import product.model.ProductDao;
@Controller
public class CartListController {
private final String command="/list.mall"; //CartAddController에서 요청한다.
private final String getPage="/mallList";
@Autowired
private ProductDao pdao;
@RequestMapping(command)
public String cartList(HttpSession session) {
//getPage="/mallList" 이동할때 장바구니 정보가 필요하다.
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
Map<Integer,Integer> map = mycart.getAllOrderList(); //장바구니를 가져오는 메서드이다.
//상품번호, 주문수량으로 쇼핑정보를 가져온다. Map으로 설정한 번호와 주문수량을 가져온다.
Set<Integer> keylist =map.keySet(); //key=pnum
System.out.println("keylist"+keylist); //장바구니 담긴 번호가출력
List<ShppingInfo> shopLists = new ArrayList<ShppingInfo>();
int totalAmount= 0;
for(Integer pnum : keylist ) {
//Integer pnum에 번호가 들어온다.
ProductBean pbean= pdao.selectProductByNum(String.valueOf(pnum));
//상품정보를 가져와서 ShppingInfo 객체를 만들어서 mallList로 이동한다.
ShppingInfo shopInfo = new ShppingInfo();
shopInfo.setPnum(pnum);
shopInfo.setPname(pbean.getName());
shopInfo.setQty(map.get(pnum));
shopInfo.setPrice(pbean.getPrice());
//총금액은 따로 챙겨간다. 왜?
int amount =pbean.getPrice()*map.get(pnum);
shopInfo.setAmount(amount);
totalAmount += amount;
//shopInfo.setAmount(pbean.getPrice()*map.get(pnum));
shopLists.add(shopInfo);
}
return getPage;
}
}
- getPage="/mallList" 으로 이동할때 장바구니 정보가 필요하다.
MyCartList mycart =(MyCartList)session.getAttribute("mycart"); -장바구니
Map<Integer,Integer> map = mycart.getAllOrderList(); - 장바구니 정보를 가져오는 메서드이다.
- 상품번호, 주문수량으로 쇼핑정보를 가져온다. Map으로 설정한 번호와 주문수량을 가져온다.
Set<Integer> keylist =map.keySet(); - key=pnum
System.out.println("keylist"+keylist); - 장바구니 담긴 번호가출력
List<ShppingInfo> shopLists = new ArrayList<ShppingInfo>();
int totalAmount= 0;
for(Integer pnum : keylist ) {
- Integer pnum에 번호가 들어온다.
ProductBean pbean= pdao.selectProductByNum(String.valueOf(pnum));
- 상품정보를 가져와서 ShppingInfo 객체를 만들어서 mallList로 이동한다.
ShppingInfo shopInfo = new ShppingInfo();
shopInfo.setPnum(pnum);
shopInfo.setPname(pbean.getName());
shopInfo.setQty(map.get(pnum));
shopInfo.setPrice(pbean.getPrice());
- 총금액은 따로 챙겨간다.
int amount =pbean.getPrice()*map.get(pnum);
shopInfo.setAmount(amount);
totalAmount += amount;
//shopInfo.setAmount(pbean.getPrice()*map.get(pnum));
shopLists.add(shopInfo);
}
-페이지 이동할때 두가지를 챙겨서 넘어가야 한다.
model.addAttribute("lists", shopLists);
model.addAttribute("totalAmount", totalAmount);
mallList.jsp 주문내역에 한줄의 상품정보를 담는 클래스
📁 mall.cart
💾 ShppingInfo
package mall.cart;
public class ShppingInfo {
//mallList.jsp 주문내역에 한줄의 상품정보를 담는 클래스
private int pnum;
private String pname;
private int qty;
private int price;
private int amount;
public int getPnum() {
return pnum;
}
public void setPnum(int pnum) {
this.pnum = pnum;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
📁WEB-INF / mall
💾 mallList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="../common/common.jsp" %>
<br>mallList.jsp<br><br>
<!-- 장바구니 담으면 list.mall을 요청하여 장바구니 목록으로 이동한다. -->
<center>
<h1>주문 내역</h1>
<table border="1">
<tr>
<td colspan="5" align="center">주문자 정보 : ${loginInfo.name }(${loginInfo.id })</td>
</tr>
<tr align="center">
<th>상품 번호</th>
<th>상품명</th>
<th>주문 수량</th>
<th>단가</th>
<th>금액</th>
</tr>
<!-- List<ShppingInfo> shopLists = new ArrayList<ShppingInfo>(); -->
<c:forEach var="shopInfo" items="${lists }">
<tr align="center">
<td>${shopInfo.pnum }</td>
<td>${shopInfo.pname }</td>
<td>${shopInfo.qty}</td>
<td>${shopInfo.price }</td>
<td>${shopInfo.amount }</td>
</tr>
</c:forEach>
<tr align="center">
<td colspan="3">
<a href="">결제하기</a>
<a href="list.prd">추가주문</a> <!-- 상품목록보기로 이동한다. -->
</td>
<td colspan="2">
총 금액:${totalAmount }
</td>
</tr>
</table>
</center>
📁WEB-INF / mall
💾 mallList.jsp
<tr align="center">
<td colspan="3">
<a href="calculate.mall">결제하기</a>
<!-- order테이블 insert, ordersdetail테이블, 상품재고수량 감소, -->
<a href="list.prd">추가주문</a> <!-- 상품목록보기로 이동한다. -->
</td>
mallList.jsp에서 결제하기 누르면 calculate.mall 요청을 하고,
calculate.mall 요청을 받는 CartCalculateController 이동한다.
📁 mall.controller
💾 CartCalculateController
package mall.controller;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import mall.cart.MyCartList;
import member.model.MemberBean;
import member.model.MemberDao;
import order.model.OrderDao;
import orderdetail.model.OrderDetailDao;
import product.model.ProductDao;
@Controller
public class CartCalculateController {
private final String command="calculate.mall";
private final String gotoPage="redirect:/list.prd";//결제후 목록보기로 간다.
@Autowired
private MemberDao mdao;
@Autowired
private ProductDao pdao;
@Autowired /* order패키지를 스캔하도록 mall-servlet에 작성한다. */
private OrderDao odao;
@Autowired
private OrderDetailDao oddao;
//mallList에서 결제하기 눌러서 calculate.mall요청을 받음
@RequestMapping(command)
public String cal(HttpSession session) {
//세션으로 설정한 장바구니 상품정보를 가져온다.
//장바구니 가져오기
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
//장바구니에 담긴 상품정보 가져오기
Map<Integer,Integer> map = mycart.getAllOrderList();
Set<Integer> keylist = map.keySet();//상품번호를 가져온다,
System.out.println("keylist:"+keylist);
MemberBean member=(MemberBean)session.getAttribute("loginInfo");
//로그인한 회원의 정보를 가져온다.
for(Integer pnum: keylist) {
//반복해서 상품수량 감소, 포인트적립
mdao.updateMpoint(member.getId(),100);//회원의 아이디와 포인트 가져온다.
}
return gotoPage;
}
}
-반복해서 상품수량 감소, 포인트적립
mdao.updateMpoint(member.getId(),100);//회원의 아이디와 포인트 가져온다.
-포인트적립이 되었는지는 sql로 확인한다.
-MemberDao로 이동한다.
📁 member.model
💾 MemberDao
public void updateMpoint(String id , int mpoint) {
MemberBean mb = new MemberBean();//필요한 두가지만 묶어서 간다.
mb.setId(id);
mb.setMpoint(mpoint);
sqlSessionTemplate.update(namespace+".UpdateMpoint",mb);
//update(String,object)
}
📁 mybatis
💾 member.xml
<update id="UpdateMpoint">
update members
set mpoint= mpoint+ #{mpoint}
where id=#{id}
</update>
<!-- 조건에 해당되는 아이디를 찾아서 적립금을 추가해준다. -->
📁 spring -appServlet
mall-servlet.xml
<context:component-scan base-package="order"/>
<context:component-scan base-package="orderdetail"/>
📁 mall.controller
💾 CartCalculateController
package mall.controller;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import mall.cart.MyCartList;
import member.model.MemberBean;
import member.model.MemberDao;
import order.model.OrderDao;
import orderdetail.model.OderDetailBean;
import orderdetail.model.OrderDetailDao;
import product.model.ProductDao;
@Controller
public class CartCalculateController {
private final String command="calculate.mall";
private final String gotoPage="redirect:/list.prd";//결제후 목록보기로 간다.
@Autowired
private MemberDao mdao;
@Autowired
private ProductDao pdao;
@Autowired /* order패키지를 스캔하도록 mall-servlet에 작성한다. */
private OrderDao odao;
@Autowired
private OrderDetailDao oddao;
//mallList에서 결제하기 눌러서 calculate.mall요청을 받음
@RequestMapping(command)
public String cal(HttpSession session) {
//세션으로 설정한 장바구니 상품정보를 가져온다.
//장바구니 가져오기
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
//장바구니에 담긴 상품정보 가져오기
Map<Integer,Integer> map = mycart.getAllOrderList();
Set<Integer> keylist = map.keySet();//상품번호를 가져온다,
System.out.println("keylist:"+keylist);
MemberBean member=(MemberBean)session.getAttribute("loginInfo");
//로그인한 회원의 정보를 가져온다.
//반복전 orders추가
//odao.insertData(회원아이디); 회원아이디를 넘겨야 한다.
odao.insertData(member.getId());
//order 테이블에서 가장 큰 oid값 가져오기
int oid = odao.getMaxOid();
System.out.println("가장 큰 oid값:"+oid);
for(Integer pnum: keylist) {
//결제가 되면 장바구니에 담긴 수량만큼 재고수량은 감소시켜야한다.
//pdao.update(상품번호,주문수량);
pdao.updateStock(pnum,map.get(pnum));
//반복해서 orderdetails추가
//orderdetails에 가장 큰 oid값 가져와서 details에 장바구니 개수만큼 삽입.
//odid, oid, pnum, qty을 넘겨야 하므로 OderDetailBean으로 넘긴다.
OderDetailBean odBean = new OderDetailBean();
odBean.setOid(oid);
odBean.setPnum(pnum);
odBean.setQty(map.get(pnum));
oddao.insertData(odBean);
//반복해서 상품수량 감소, 포인트적립
mdao.updateMpoint(member.getId(),100);//회원의 아이디와 포인트 가져온다.
//포인트적립이 되었는지는 sql로 확인한다.
}//for
//장바구니 세션 해제 : 결제후 장바구니가 비어지도록!
//로그아웃전에 장바구니 세션만 해제
session.removeAttribute("mycart");
return gotoPage;
}
}
-mallList에서 결제하기 눌러서 calculate.mall요청을 받음
@RequestMapping(command)
public String cal(HttpSession session) {
-세션으로 설정한 장바구니 상품정보를 가져온다.
-장바구니 가져오기
MyCartList mycart =(MyCartList)session.getAttribute("mycart");
-장바구니에 담긴 상품정보 가져오기
Map<Integer,Integer> map = mycart.getAllOrderList();
Set<Integer> keylist = map.keySet(); -상품번호를 가져온다,
System.out.println("keylist:"+keylist);
MemberBean member=(MemberBean)session.getAttribute("loginInfo");
-로그인한 회원의 정보를 가져온다.
-반복전 orders추가
-odao.insertData(회원아이디); 회원아이디를 넘겨야 한다.
odao.insertData(member.getId());
-order 테이블에서 가장 큰 oid값 가져오기
int oid = odao.getMaxOid();
System.out.println("가장 큰 oid값:"+oid);
for(Integer pnum: keylist) {
-결제가 되면 장바구니에 담긴 수량만큼 재고수량은 감소시켜야한다.
-pdao.update(상품번호,주문수량);
pdao.updateStock(pnum,map.get(pnum)); -ProductDao 이동한다.
-반복해서 orderdetails추가
-orderdetails에 가장 큰 oid값 가져와서 details에 장바구니 개수만큼 삽입.
-odid, oid, pnum, qty을 넘겨야 하므로 OderDetailBean으로 넘긴다.
OderDetailBean odBean = new OderDetailBean();
odBean.setOid(oid);
odBean.setPnum(pnum);
odBean.setQty(map.get(pnum));
oddao.insertData(odBean); -OrderDetailDao로 이동한다.
-반복해서 상품수량 감소, 포인트적립
mdao.updateMpoint(member.getId(),100);//회원의 아이디와 포인트 가져온다.
-포인트적립이 되었는지는 sql로 확인한다.
}//for
-장바구니 세션 해제 : 결제후 장바구니가 비어지도록!
-로그아웃전에 장바구니 세션만 해제
session.removeAttribute("mycart");
📁 product.model
💾 ProductDao
public void updateStock(Integer pnum, Integer qty) {
ProductBean pb = new ProductBean();
pb.setNum(pnum);
pb.setStock(qty);
sqlSessionTemplate.update(namespace+".UpdateStock",pb);
}
📁 mybatis
💾 product.xml
<update id="UpdateStock">
update products
set stock = stock- #{stock}
where num = #{num}
</update>
📁 order.model
💾OrderBean
package order.model;
public class OrderBean {
private int oid;
private String mid;
private String orderdate;
public int getOid() {
return oid;
}
public void setOid(int oid) {
this.oid = oid;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getOrderdate() {
return orderdate;
}
public void setOrderdate(String orderdate) {
this.orderdate = orderdate;
}
}
💾 OrderDao
package order.model;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("OrderDao")
public class OrderDao {
private final String namespace="order.model.Order"; //order.xml
@Autowired
SqlSessionTemplate sqlSessionTemplate;
public void insertData(String id) {
sqlSessionTemplate.insert(namespace+".InsertData", id);
}
public int getMaxOid() {
int max =sqlSessionTemplate.selectOne(namespace+".GetMaxOid");
System.out.println("max:"+max);
return max;//가장큰값 가지고 돌아간다.
}
}
📁mybatis
💾 order.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="order.model.Order">
<insert id="InsertData">
insert into orders
values(seqoid.nextval,#{mid},sysdate)
</insert>
<!-- #{mid} -회원의 아이디를 넘기므로 -->
<select id="GetMaxOid" resultType="int">
select max(oid) from orders
</select>
</mapper>
<!-- order.xml -->
📁 orderdetail.model
💾 OderDetailBean
package orderdetail.model;
public class OderDetailBean {
private int odid; //sequence
private int oid; //주문번호
private int pnum; //상품번호
private int qty;//주문수량
public int getOdid() {
return odid;
}
public void setOdid(int odid) {
this.odid = odid;
}
public int getOid() {
return oid;
}
public void setOid(int oid) {
this.oid = oid;
}
public int getPnum() {
return pnum;
}
public void setPnum(int pnum) {
this.pnum = pnum;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
}
💾OrderDetailDao
package orderdetail.model;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("OrderDetailDao")
public class OrderDetailDao {
private final String namespace="order.model.OrderDetail";
@Autowired
SqlSessionTemplate sqlSessionTemplate;
public void insertData(OderDetailBean odBean) {
int cnt =sqlSessionTemplate.insert(namespace+".InsertData",odBean);
System.out.println("OrderDetailDao insertcnt:"+cnt);
}
}
📁mybatis
💾 orderdetail.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="order.model.OrderDetail">
<insert id="InsertData">
insert into orderdetails(odid,oid,pnum,qty) values(seqodid.nextval, #{oid},#{pnum},#{qty})
</insert>
</mapper>
<!-- orderdtail.xml -->
'BACK END > Spring' 카테고리의 다른 글
12일(09.01)Spring_MyBatis_Products (주문내역보기) (0) | 2022.09.02 |
---|---|
11일(08.31)Spring_MyBatis_Products (0) | 2022.09.01 |
11일(08.31)Spring_MyBatis_Products (삭제-이미지포함, 수정-이미지포함, 로그인세션) (0) | 2022.08.31 |
10일(08.30)Spring_MyBatis_Products (목록보기, 입력하기-유효성&파일 업로드, 상세보기(이미지까지 포함해서)) (0) | 2022.08.30 |
9일(08.29) Spring_Mybatis_Movie (추가하기 - select option값 가져오기, 입력 유효성검사, 중복체크(ajax), 수정하기 ) (0) | 2022.08.29 |