판매자 페이지에서 주문 리스트를 불러오기 위해서는
상세 주문정보가 담긴 orderList테이블을 기반으로
주문 묶음정보가 담긴 order 테이블,
상품 정보가 담긴 goods 테이블,
구매자 정보가 담긴 member 테이블,
상품 옵션 정보가 담긴 option 테이블,
배송정보가 담긴 deliverytemplate 테이블의 정보를 가져와야 한다.
주문 상세페이지의 경우(selectOne) 각 테이블의 PK를 get 메소드로 불러온 뒤,
mapper까지 연결하여 select로 가져와서
model 이라면 model.addAttribute() 로 값을 넘겨주고,
modelAndView 라면 modelAndView.addObject() 로 값을 넘겨주면 되지만,
selectList로 값을 받아오고, 넘길 때에는
각 index에서 해당하는 PK값을 특정하기 힘들들뿐더러
list를 받아온다 하더라도 foreach문에서 출력할때 복잡해진다.
그렇기 때문에 inner join을 통해서 정보를 받아오고,
VO에 새로 받아올 컬럼들을 추가한 뒤,
하나의 list로 담아서 jsp 페이지로 넘겼다.
1. OrderListMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<!-- 판매자 페이지에서 주문 리스트 불러오기 -->
<select id="select_order_list" resultType="orderList" parameterType="java.util.Map">
SELECT
ol.ol_num,
ol.ord_num,
ol.gds_num,
ol.opt_num,
ol.ol_count,
ol.gds_seller,
o.mem_num,
o.ord_totalprice,
o.ord_delnum,
o.ord_request,
o.ord_status,
o.ord_date,
g.gds_thumbnail,
g.gds_name,
g.gds_price,
d.deltem_delfee,
m.mem_id,
p.opt_1stname,
p.opt_1stval,
p.opt_2ndname,
p.opt_2ndval
FROM project.orderlist AS ol
left join project.order AS o <!-- order 테이블과 join -->
ON ol.ord_num = o.ord_num
left JOIN project.goods AS g <!-- goods 테이블과 join -->
ON ol.gds_num = g.gds_num
left JOIN project.member AS m <!-- member 테이블과 join -->
ON o.mem_num = m.mem_num
left JOIN project.option AS p <!-- option 테이블과 join -->
ON ol.opt_num = p.opt_num
left JOIN project.deliverytemplate AS d <!-- deliverytemplate 테이블과 join -->
ON g.deltem_num = d.deltem_num
WHERE ol.gds_seller=#{sel_name}
GROUP BY ol.ol_num
ORDER BY ol.ol_num DESC
LIMIT #{pageIndex}, 10
</select>
|
cs |
String sel_name 과 int pageIndex 를 parameter로 보내기 때문에
parameterType을 Map으로 설정했고,
기준이 되는 orderList 테이블의 PK값인 ol_num을 group으로 묶었다.
우선 쿼리문이 잘 동작하는지 MySQL Workbench에서 실행해 본다.
정삭적으로 작동한다.
2. OrderListVO.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package com.myshop.cm.model;
import java.sql.Timestamp;
public class OrderListVO {
// orderlist 정보
private int ol_num;
private int ord_num;
private int gds_num;
private int opt_num;
private int ol_count;
private String gds_seller;
// order테이블 정보
private int mem_num;
private int ord_totalprice;
private String ord_delnum;
private String ord_request;
private String ord_status;
private Timestamp ord_date;
// 주문정보를 토대로 받아올 추가정보들
private String gds_thumbnail;
private String gds_name;
private int gds_price;
private String mem_id;
private String opt_1stname;
private String opt_1stval;
private String opt_2ndname;
private String opt_2ndval;
private int deltem_delfee;
|
cs |
이제 VO에 필드명을 추가한다.
3. OrderListController.java
1
2
3
4
5
6
7
8
9
10
11
12
|
//판매자 주문내역 목록으로 이동
@RequestMapping(value = "/sellerorderlist")
public ModelAndView sellerorderlist(HttpServletRequest request, HttpServletResponse response) throws Exception{
// 주문리스트 받아오기
Map<String, Object> orderlist = orderService.getOrderList(request, response);
ModelAndView sellerorderlistM = new ModelAndView("seller/sellerorderlist");
sellerorderlistM.addAllObjects(orderlist);
return sellerorderlistM;
}
|
cs |
받아온 List를 "orderlist"로 view페이지에 전달했다.
4. orderlist.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
<%@ 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>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="<c:url value='/resources/css/seller/sellerorderlist.css'/>">
</head>
<body>
<%@ include file="../layout/sellerSidebar.jsp" %>
<div class="main">
<table border="1">
<tr style="text-align: center;">
<th>주문번호</th>
<th colspan="2">상품이름</th>
<th>옵션</th>
<th>수량</th>
<th>주문자(이름)</th>
<th>배송비</th>
<th>주문금액</th>
<th>상태</th>
</tr>
<!-- 화면 출력 번호 변수 정의 -->
<c:set var="num" value="${listcount-(page-1)*10}"/>
<c:forEach var="order" items="${orderlist}" >
<tr>
<td>
<!-- 번호 출력 부분 -->
<c:out value="${num}"/>
<c:set var="num" value="${num-1}"/>
</td>
<td style="border-right: none;">
<img src="<%=request.getContextPath() %>/resources/images/thumbnailimage/${order.gds_thumbnail}" height="100" width="100" />
</td>
<td style="border-left: none;">
<a href="sellerorderdetail?ol_num=${order.ol_num}&page=${page}">${order.gds_name}<br><br></a>
<div style="text-align: right"> <a href="goodsupdate?&gds_num=${order.gds_num}">상품 수정하기</a></div>
</td>
<td>
<c:choose>
<c:when test="${order.opt_2ndval != null}"> <!-- 옵션이 2종류면 -->
${order.opt_1stname} : ${order.opt_1stval}<br>
${order.opt_2ndname} : ${order.opt_2ndval}
</c:when>
<c:when test="${order.opt_1stval != null}"> <!-- 옵션이 1 종류면 -->
${order.opt_1stname} : ${order.opt_1stval}
</c:when>
<c:otherwise> <!-- 옵션이 없다면 -->
-
</c:otherwise>
</c:choose>
</td>
<td>${order.ol_count}</td>
<td>${order.mem_id}</td>
<td><fmt:formatNumber value="${order.deltem_delfee}" pattern="#,###원" /></td>
<td><fmt:formatNumber value="${order.gds_price}" pattern="#,###원" /></td>
<td>${order.ord_status} <br>
<c:choose>
<c:when test="${order.ord_delnum eq null }"> <!-- 배송준비중 이면 -->
<input type="button" value="송장번호 입력">
</c:when>
<c:when test="${order.ord_delnum ne null }"> <!-- 배송중 이면 -->
${order.ord_delnum}
</c:when>
</c:choose>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
|
cs |
controller에서 전달받은 orderlist을 order로 설정하여 모두 출력되게 했다.
5. 결과 페이지
정상적으로 출력되었다.
'Spring' 카테고리의 다른 글
[Spring]Spring쇼핑몰 프로젝트 - Ajax를 활용하여 상품 문의 리스트 만들기 아코디언 리스트 (0) | 2021.12.27 |
---|---|
[Spring] Spring쇼핑몰 프로젝트 - 다중 옵션, 옵션 조합, 옵션 별 수량 입력 비동기 처리 (2) | 2021.12.09 |