查询订单详情
- 需求和步骤分析
- 代码实现
1)需求和步骤分析
需求:只有未付款的订单,点击“付款”,跳转到订单的详情页面
步骤分析:
- 在订单列表,点击付款:${path}/order/getById?oid=xxx
- 在OrderServlet中编写getById()
接收oid
调用service 返回Order
将order放入域中,请求转发order_info.jsp - orderDao中 通过一个订单号查询订单详情
用mapListHandler封装结果集,然后使用BeanUtils封装成指定的bean对象,添加到order的items中即可
2)代码实现
① 修改连接
<!-- 未付款 去付款 -->
<a href="${path }/order/getById?oid=${order.oid}">付款</a>
② OrderServlet
private void getById(HttpServletRequest request, HttpServletResponse response) throws Exception {
//1、获取oid
String oid=request.getParameter("oid");
//2、调用service通过oid 返回值order
Order order=orderService.getById(oid);
//3、将order放入request域中
request.setAttribute("order", order);
request.getRequestDispatcher("/jsp/order_info.jsp").forward(request, response);
}
③ OrderDaoImpl
@Override
public Order getById(String oid) throws Exception {
String sql="select * from orders where oid=?";
Order order=qr.query(sql, new BeanHandler<>(Order.class),oid);
//封装orderitems
sql="select * from orderitem oi,product p where oi.pid=p.pid and oi.oid=?";
List<Map<String, Object>> mList=qr.query(sql, new MapListHandler(),oid);
for(Map<String, Object> map:mList) {
//封装product
Product p=new Product();
BeanUtils.populate(p, map);
//封装orderItem
OrderItem oi=new OrderItem();
BeanUtils.populate(oi, map);
oi.setProduct(p);
//将oi添加到order的items中
order.getItems().add(oi);
}
return order;
}