header
<!DOCTYPE html>
<html lang="en">
<head>
<title>Store</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/join-form">회원가입</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/login-form">로그인</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/store/list">상품목록</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/store/save-form">상품등록</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/order/list">구매목록</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/logout">로그아웃</a>
</li>
</ul>
</div>
</div>
</nav>
<!--네브바종료-->
OrderResponse
package com.metacoding.storev2.order;
import lombok.Data;
public class OrderResponse {
@Data
public static class OrderListPage {
private Integer id;
private String name;
private Integer qty;
private Integer totalPrice;
public OrderListPage(Integer id, String name, Integer qty, Integer totalPrice) {
this.id = id;
this.name = name;
this.qty = qty;
this.totalPrice = totalPrice;
}
}
}
OrderController
package com.metacoding.storev2.order;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@RequiredArgsConstructor
@Controller
public class OrderController {
private final OrderService orderService;
@GetMapping("/order/list")
public String orderList(HttpServletRequest request) {
List<OrderResponse.OrderListPage> OrderListPage = orderService.구매목록();
request.setAttribute("models", OrderListPage);
return "order/list";
}
}
OrderService
package com.metacoding.storev2.order;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@RequiredArgsConstructor
@Service
public class OrderService {
private final OrderRepository orderRepository;
public List<OrderResponse.OrderListPage> 구매목록() {
return orderRepository.findAllJoinStore();
}
}
OrderRepository
package com.metacoding.storev2.order;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@Repository
public class OrderRepository {
private final EntityManager em;
public List<OrderResponse.OrderListPage> findAllJoinStore() {
List<OrderResponse.OrderListPage> orderListPages = new ArrayList<>();
String sql = "select ot.id, st.name, ot.qty, ot.total_price from order_tb ot inner join store_tb st on ot.store_id=st.id order by ot.id desc";
Query query = em.createNativeQuery(sql);
List<Object[]> objList = (List<Object[]>) query.getResultList();
for (Object[] obj : objList) {
OrderResponse.OrderListPage olp = new OrderResponse.OrderListPage(
(Integer) obj[0],
(String) obj[1],
(Integer) obj[2],
(Integer) obj[3]
);
orderListPages.add(olp);
}
return orderListPages;
}
}
order/list
{{> layout/header}}
<div class="container mt-2">
<div class="mt-4 p-5 bg-light text-dark rounded-4">
<h1>구매목록 페이지</h1>
<hr>
<table class="mt-4 table table-hover">
<thead>
<tr>
<th>주문번호</th>
<th>상품명</th>
<th>구매개수</th>
<th>총 가격</th>
</tr>
</thead>
<tbody>
{{#models}}
<tr>
<td>{{id}}</td>
<td>{{name}}</td>
<td>{{qty}}개</td>
<td>{{totalPrice}}원</td>
</tr>
{{/models}}
</tbody>
</table>
</div>
</div>
</body>
</html>
Share article