• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Javaweb网上商城项目实战(23)实现订单查询功能

项目实战 Geekerstar 11个月前 (05-27) 559次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

原理分析

具体实现

修改header.jsp中我的订单的链接

<a href="${pageContext.request.contextPath}/OrderServlet?method=findMyOrdersWithPage&num=1">我的订单</a>

OrderServlet中增加findMyOrdersWithPage方法

//findMyOrdersWithPage
public String findMyOrdersWithPage(HttpServletRequest req, HttpServletResponse resp) throws Exception {
	//获取用户信息
	User user=(User)req.getSession().getAttribute("loginUser");
	//获取当前页
	int curNum=Integer.parseInt(req.getParameter("num"));
	//调用业务层功能:查询当前用户订单信息,返回PageModel
	OrderService OrderService=new OrderServiceImp();
	//SELECT * FROM orders WHERE uid=? limit ? , ? 
	//PageModel:1_分页参数 2_url  3_当前用户的当前页的订单(集合) ,每笔订单上对应的订单项,以及订单项对应的商品信息
	PageModel pm=OrderService.findMyOrdersWithPage(user,curNum);
	//将PageModel放入request
	req.setAttribute("page", pm);
	//转发到/jsp/order_list.jsp
	return "/jsp/order_list.jsp";
}

OrderService中添加该方法

PageModel findMyOrdersWithPage(User user, int curNum)throws Exception;

OrderService中实现该方法

@Override
public PageModel findMyOrdersWithPage(User user, int curNum) throws Exception {
	//1_创建PageModel对象,目的:计算并且携带分页参数
	//select count(*) from orders where uid=?
	int totalRecords=orderDao.getTotalRecords(user);
	PageModel pm=new PageModel(curNum, totalRecords, 3);
	//2_关联集合  select * from orders where uid=? limit ? ,?
	List list=orderDao.findMyOrdersWithPage(user,pm.getStartIndex(),pm.getPageSize());
	pm.setList(list);
	//3_关联url
	pm.setUrl("OrderServlet?method=findMyOrdersWithPage");
	return pm;
}

OrderDao中添加方法

int getTotalRecords(User user)throws Exception;

List findMyOrdersWithPage(User user, int startIndex, int pageSize)throws Exception;

OrderDaoImp中实现该方法

@Override
public int getTotalRecords(User user) throws Exception {
	String sql="select count(*) from orders where uid=?";
	QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
	Long num=(Long)qr.query(sql, new ScalarHandler(),user.getUid());
	return num.intValue();
}

@Override
public List findMyOrdersWithPage(User user, int startIndex, int pageSize) throws Exception {
	String sql="select * from orders where uid=? limit ? , ?";
	QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
	List<Order> list=qr.query(sql, new BeanListHandler<Order>(Order.class),user.getUid(),startIndex,pageSize);
	
	//遍历所有订单
	for (Order order : list) {
		//获取到每笔订单oid   查询每笔订单下的订单项以及订单项对应的商品信息
		String oid=order.getOid();
		sql="select * from orderItem o ,product p where o.pid=p.pid and oid=?";
		List<Map<String, Object>> list02 = qr.query(sql, new MapListHandler(),oid);
		//遍历list
		for (Map<String, Object> map : list02) {
			OrderItem orderItem=new OrderItem();
			Product product=new Product();
			// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
			// 1_创建时间类型的转换器
			DateConverter dt = new DateConverter();
			// 2_设置转换的格式
			dt.setPattern("yyyy-MM-dd");
			// 3_注册转换器
			ConvertUtils.register(dt, java.util.Date.class);
			
			//将map中属于orderItem的数据自动填充到orderItem对象上
			BeanUtils.populate(orderItem, map);
			//将map中属于product的数据自动填充到product对象上
			BeanUtils.populate(product, map);
			
			//让每个订单项和商品发生关联关系
			orderItem.setProduct(product);
			//将每个订单项存入订单下的集合中
			order.getList().add(orderItem);
			
		}
	}
	return list;
}

JSP页面获取订单信息,完成响应

修改order_list.jsp, PS: 遍历数据时,2个循环,大循环遍历订单,小循环遍历的是订单上的订单项

由于代码较多较杂,这里只粘贴图片,对应修改即可,和之前的原理也一样。

效果演示

运行程序,添加几个商品订单,然后点击我的订单,订单页面成功显示。

至此就完成了订单查询功能。

源码下载

下载地址

导航目录

查看导航
丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Javaweb网上商城项目实战(23)实现订单查询功能
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00