20_查询订单详情

查询订单详情

  • 需求和步骤分析
  • 代码实现

1)需求和步骤分析

需求:只有未付款的订单,点击“付款”,跳转到订单的详情页面
步骤分析:

  1. 在订单列表,点击付款:${path}/order/getById?oid=xxx
  2. 在OrderServlet中编写getById()
    接收oid
    调用service 返回Order
    将order放入域中,请求转发order_info.jsp
  3. 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;
	}
④测试即可
要实现订单详情,我们可以在订单表中添加一些额外的字段来保存订单的详细信息,例如订单状态、收货地址、支付方式等等。假设我们需要保存以下信息: - 订单号(order_no):表示订单的唯一标识,可以通过自增长主键或者使用 UUID 算法等方式生成。 - 订单状态(status):表示订单的当前状态,例如已下单、已付款、已发货、已完成等等。 - 提交订单时间(order_time):表示用户提交订单的时间。 - 付款时间(payment_time):表示用户完成支付的时间。 - 发货时间(delivery_time):表示商城发货的时间。 - 收货时间(receive_time):表示用户收货的时间。 - 评价时间(comment_time):表示用户对购物体验的评价时间。 - 收货人姓名(receiver_name):表示收货人的姓名。 - 邮政编码(postal_code):表示收货地址的邮政编码。 - 联系电话(contact_phone):表示收货人的联系电话。 - 收货地址(delivery_address):表示收货人的详细地址。 我们可以使用以下 SQL 语句向订单表中添加这些字段: ``` ALTER TABLE orders ADD COLUMN order_no VARCHAR(32) NOT NULL UNIQUE; ALTER TABLE orders ADD COLUMN status VARCHAR(255) NOT NULL DEFAULT '已下单'; ALTER TABLE orders ADD COLUMN order_time DATETIME NOT NULL; ALTER TABLE orders ADD COLUMN payment_time DATETIME; ALTER TABLE orders ADD COLUMN delivery_time DATETIME; ALTER TABLE orders ADD COLUMN receive_time DATETIME; ALTER TABLE orders ADD COLUMN comment_time DATETIME; ALTER TABLE orders ADD COLUMN receiver_name VARCHAR(255) NOT NULL; ALTER TABLE orders ADD COLUMN postal_code VARCHAR(6) NOT NULL; ALTER TABLE orders ADD COLUMN contact_phone VARCHAR(11) NOT NULL; ALTER TABLE orders ADD COLUMN delivery_address VARCHAR(255) NOT NULL; ``` 接下来,当用户提交订单时,我们可以生成一个唯一的订单号,并向订单表中插入一条新的订单记录: ``` INSERT INTO orders (order_no, status, order_time, receiver_name, postal_code, contact_phone, delivery_address) VALUES ('1101000301', '等待收货', '2018-12-2 20:32:17', '八戒', '100190', '1380***1234', '北京市房山区高老庄3排6号'); ``` 当用户完成支付时,我们可以更新订单表中的状态和支付时间: ``` UPDATE orders SET status = '已付款', payment_time = '2018-12-2 20:35:03' WHERE order_no = '1101000301'; ``` 当商城发货时,我们可以更新订单表中的状态和发货时间: ``` UPDATE orders SET status = '商城发货', delivery_time = '2018-12-3 08:13:34' WHERE order_no = '1101000301'; ``` 当用户收到货物时,我们可以更新订单表中的状态和收货时间: ``` UPDATE orders SET status = '用户收货', receive_time = NOW() WHERE order_no = '1101000301'; ``` 最后,当用户需要查看订单详情时,我们可以使用以下 SQL 查询语句: ``` SELECT * FROM orders WHERE order_no = '1101000301'; ``` 其中,'1101000301' 是订单的唯一标识。这条 SQL 语句将返回订单表中 order_no 为 '1101000301' 的订单记录,包括订单的所有详细信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robona

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值