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

原理分析

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

具体实现

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

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());

Listlist=qr.query(sql, new BeanListHandler(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> list02 = qr.query(sql, new MapListHandler(),oid);

//遍历list

for (Mapmap : 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个循环,大循环遍历订单,小循环遍历的是订单上的订单项

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

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

效果演示

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

gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

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

源码下载

[dm href=’https://www.jikewenku.com/product/1700.html’]下载地址[/dm]

导航目录

[dm href=’https://www.jikewenku.com/project/2786.html’]查看导航[/dm]


版权声明:本文为weixin_33795883原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。