주문 처리를 위한 DAO 를 만들기 위해서 주문 정보를 담을 VO를 만든다.
DTO (VO)
OrderVO
public class OrderVO {
private int odseq;
private int oseq;
private String id;
private Timestamp indate;
private int pseq;
private int quantity;
private String mname;
private String zip_num;
private String address;
private String phone;
private String pname;
private int price2;
setter, getter
주문 처리 등록을 위해 CartVO 자바빈 클래스에 oseq 주문번호를 추가한다.
CartVO
public class CartVO {
private int odseq; //주문 상세 번호
private int oseq; //주문번호
private int cseq; //장바구니 번호
private String id; //회원아이디
private int pseq; //상품번호
private String mname; //회원이름
private String pname; //상품이름
private int quantity; //수량
private int price2; //가격
private String image;
private Timestamp indate;
setter, getter
주문 처리의 테이블 내용은 다음과 같다.
SQL
-- 주문 테이블 명 tbl_orders create table tbl_orders( oseq number PRIMARY KEY, -- 주문번호 id varchar2(20) , -- 주문자 아이디 , tbl_member 테이블의 기본키의 id컬럼 indate date default sysdate -- 주문일 )TABLESPACE macaronics ; -- tbl_orders 시퀀스 생성 create SEQUENCE orders_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE ; -- tbl_orders 외래키 제약 조건 추가 alter table TBL_ORDERS add CONSTRAINT TBL_ORDERS_id_fk FOREIGN KEY (id) REFERENCES tbl_member(id) on DELETE CASCADE ; -- 주문 상세 테이블 생성 create table tbl_order_detail( odseq number PRIMARY KEY , -- 주문 상세번호 order_detail_seq 시퀀스 객체로 자동 일련 번호 부여 oseq number , -- FK 주문번호 tbl_orders 테이블의 기본 키인 oseq 컬럼 pseq number , -- FK 상품번호 tbl_product 테이블릐 기본 키인 pseq 컬럼 quantity number, -- 주문수량 result char(1) DEFAULT 1 -- 처립여부 1: 미처리 2 : 처리 )TABLESPACE macaronics ; -- 주문 상세 테이블 시퀀스 생성 create SEQUENCE order_detail_seq START WITH 1 INCREMENT by 1 NOMAXVALUE NOCACHE NOCYCLE; -- TBL_ORDER_DETAIL oseq 외래키 제약 조건 추가 alter table TBL_ORDER_DETAIL add CONSTRAINT tbl_order_detail_oseq_FK FOREIGN key(oseq) REFERENCES tbl_orders(oseq) on DELETE CASCADE ; -- TBL_ORDER_DETAIL pseq 외래키 제약 조건 추가 alter table TBL_ORDER_DETAIL add CONSTRAINT tbl_order_detail_pseq_FK FOREIGN key(pseq) REFERENCES tbl_product (pseq) on DELETE CASCADE ;
주문 테이블을 엑세스하는 DAO 클래스 만들기
DAO
주문 등록에 순서는 다음과 같이 개발진행한다.
1. tbl_orders 등록하기
2. 등록된 oseq 가져오기
3. 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록 하기
OrderDAO
package net.macaronics.web.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import config.MybatisService;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.OrderVO;
public class OrderDAO {
private static OrderDAO instance;
private Logger logger =LogManager.getLogger(OrderDAO.class);
private SqlSession sqlSession;
private OrderDAO() {
}
public static OrderDAO getInstance() {
if (instance == null) {
instance = new OrderDAO();
}
return instance;
}
//주문 tbl_orders 테이블에 등록
public int insertOrder(List<CartVO> cartList, String id){
int maxOseq=0;
try{
sqlSession =MybatisService.getFactory().openSession();
//1. tbl_orders 등록하기
sqlSession.insert("order.insertOrder", id);
sqlSession.commit();
//2. 등록된 oseq 가져오기
maxOseq=sqlSession.selectOne("order.selectMaxOseq");
logger.info("maxOseq -----------------{} " , maxOseq);
//3. 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록 하기
for(CartVO cartVO : cartList){
//주문 테이블의 maxOseq 번호를 자바빈에 저장하기
cartVO.setOseq(maxOseq);
insertOrderDetail(cartVO);
}
}catch(Exception e){
e.printStackTrace();
}finally{
MybatisService.sessionClose(sqlSession);
}
return maxOseq;
}
// 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록
public void insertOrderDetail(CartVO cartVO){
try{
logger.info("insertOrderDetail ------- {}" , cartVO.toString());
sqlSession=MybatisService.getFactory().openSession();
sqlSession.insert("order.insertOrderDetail", cartVO);
}catch(Exception e){
e.printStackTrace();
}finally{
sqlSession.commit();
MybatisService.sessionClose(sqlSession);
}
}
//주문 목록 불러오기
public List<OrderVO> listOrderById(String id, String result, int oseq){
List<OrderVO> orderList=new ArrayList<>();
try{
sqlSession =MybatisService.getFactory().openSession();
Map<String, Object> map =new HashMap<>();
map.put("id", id);
map.put("result", result);
map.put("oseq", oseq);
orderList=sqlSession.selectList("order.listOrderById" , map);
}catch(Exception e){
e.printStackTrace();
}finally{
MybatisService.sessionClose(sqlSession);
}
return orderList;
}
//현재 진행중인 주문처리 목록 상세 보기를 위한 tbl_orders 테이블의 주문번호 불러오기
public List<Integer> selectSeqOrdering(String id){
List<Integer> oseqList=new ArrayList<>();
try{
sqlSession=MybatisService.getFactory().openSession();
oseqList=sqlSession.selectList("order.selectSeqOrdering", id);
}catch(Exception e){
e.printStackTrace();
}finally{
MybatisService.sessionClose(sqlSession);
}
return oseqList;
}
}
주문 처리를 위한 액션 클래스
Action
OrderInsertAction
package net.macaronics.web.controll;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dao.OrderDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;
public class OrderInsertAction implements Action {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = "MacaronicsServlet?command=order_list&oseq=";
HttpSession session =request.getSession();
MemberVO loginUser=(MemberVO)session.getAttribute("loginUser");
if(loginUser==null){
url = "MacaronicsServlet?command=login_form";
}else{
CartDAO cartDAO =CartDAO.getInstance();
//장바구니에 담긴 목록을 가져온다.
List<CartVO> cartList=cartDAO.listCart(loginUser.getId());
OrderDAO orderDAO =OrderDAO.getInstance();
//주문 상품으로 등록한다. 반환 값으로 현재 등록한 주문번호를 가져온다.
int maxOseq=orderDAO.insertOrder(cartList, loginUser.getId());
//장바구니 비우기
for(CartVO cart: cartList){
cartDAO.deleteCart(cart.getCseq(), loginUser.getId());
}
url +=maxOseq;
}
response.sendRedirect(url);
}
}
OrderListAction
package net.macaronics.web.controll;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dao.OrderDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;
import net.macaronics.web.dto.OrderVO;
public class OrderListAction implements Action{
//주문 처리후 바로 보여주는 주문 목록 페이지
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url ="mypage/orderList.jsp";
HttpSession session =request.getSession();
MemberVO loginUser =(MemberVO)session.getAttribute("loginUser");
if(loginUser ==null){
url="MacaronicsServlet?command=login_form";
}else{
OrderDAO orderDAO =OrderDAO.getInstance();
int oseq=Integer.parseInt(request.getParameter("oseq"));
// 미처리 항목 1을 넣는다.
List<OrderVO> orderList =orderDAO.listOrderById(loginUser.getId(), "1", oseq);
int orderTotalPrice =0;
for(OrderVO orderVO : orderList){
orderTotalPrice +=orderVO.getPrice2()*orderVO.getQuantity();
}
request.setAttribute("orderList", orderList);
request.setAttribute("orderTotalPrice", orderTotalPrice);
}
request.getRequestDispatcher(url).forward(request, response);
}
}
View
주문 내역 리스트 출력
orderList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<jsp:include page="../include/Header.jsp" />
</head>
<body>
<jsp:include page="../include/HeaderMenu.jsp" />
<!-- catg header banner section -->
<section id="aa-catg-head-banner">
<img src="/dailyShop/img/slider/4.jpg" alt="fashion img" height="300" style="margin-left: auto; margin-right: auto; display: block;">
<div class="aa-catg-head-banner-area">
<div class="container">
</div>
</div>
</section>
<!-- / catg header banner section -->
<!-- product category -->
<section id="aa-product-category">
<div class="container">
<div class="row">
<div class="col-lg-9 col-md-9 col-sm-8 col-md-push-3">
<div class="aa-product-catg-content">
<div class="aa-product-catg-body">
<div class="table-responsive">
<table class="table table-striped">
<tr class="danger">
<th>상품명</th>
<th>수량</th>
<th>가격</th>
<th>주문일</th>
<th>진행상태</th>
</tr>
<tr>
<c:forEach items="${orderList}" var="orderVO">
<tr>
<td>${orderVO.pname}</td>
<td>${orderVO.quantity }</td>
<td><fmt:formatNumber type="currency" value="${orderVO.price2*orderVO.quantity }"/></td>
<td><fmt:formatDate value="${orderVO.indate }" type="date" /></td>
<td>처리 진행 중</td>
</tr>
</c:forEach>
</tr>
</table>
</div>
</div>
<div class="text-center">
<input type="button" value="쇼핑 계속하기" class="btn btn-primary"
onclick="location.href='MacaronicsServlet?command=index'" >
</div>
</div>
</div>
<div class="col-lg-3 col-md-3 col-sm-4 col-md-pull-9">
<aside class="aa-sidebar">
<!-- single sidebar -->
<div class="aa-sidebar-widget">
<h3>Category</h3>
<ul class="aa-catg-nav">
<li><a href="MacaronicsServlet?command=category&kind=1">남성운동화</a></li>
<li><a href="MacaronicsServlet?command=category&kind=2">여성운동화</a></li>
<li><a href="MacaronicsServlet?command=category&kind=3">남성구두</a></li>
<li><a href="MacaronicsServlet?command=category&kind=4">여성구두</a></li>
<li><a href="MacaronicsServlet?command=category&kind=5">On Sale</a></li>
</ul>
</div>
</aside>
</div>
</div>
</div>
</section>
<!-- / product category -->
<jsp:include page="../include/Footer.jsp" />
제작 : macaronics.net - Developer Jun Ho Choi
소스 : https://github.com/braverokmc79/jsp_sin
${request.getContextPath() } 처리를 안한 부분이 있으므로
루트 설정( http://macaronics.net/index.php/m01/jsp/view/1352) 및 server.xml 에서 DB 컨넥션 설정은 필수 설정이다.
















댓글 ( 4)
댓글 남기기