在点击我的订单会跳转到一个servlet,但是订单中也会涉及到分页的技术,传递过来的参数只需要一个当前页currPage=1,
下面是页面跳转后的servlet
//从request域和session域中拿出currPage和user对象 Integer currPage = Integer.parseInt(request.getParameter("currPage")); User u = (User) request.getSession().getAttribute("existUser"); //直接调用业务层 OrderService os = new OrderServiceImpl(); //因为user的uid和数据库中的orders的uid关联,所以把参数列表只需要传currPage和uid PageBean<Order> pageBean = os.findByUid(currPage,u.getUid()); //然后将查询的结果保存到域对象然后转发 request.setAttribute("pageBean", pageBean); request.getRequestDispatcher("/jsp/order.jsp").forward(request, response);
在业务层的实现类中封装pageBean的数据
//首先创建pageBean对象 PageBean<Order> pageBean = new PageBean<>(); //封装每页显示的记录数 Integer pageSize = 5; pageBean.setPageSize(pageSize); //封装当前页数 pageBean.setCurrPage(currPage); //获得总记录数 //总记录数就是通过用户的uid去orders的表中去查找出总的订单项 OrderDao od = new OrderDaoImpl(); Integer count = od.findCountByUid(uid); pageBean.setTotalCount(count); //获得总页数 //总页数就是总 记录数除以每页显示的记录数然后向上取整 double tx = count; Double tp = Math.ceil(tx / pageSize); Integer totalPage = tp.intValue(); pageBean.setTotalPage(totalPage); //获得list封装的订单项详细信息和订单项中的商品详细信息 int begin = (currPage-1) * pageSize; List<Order> list = od.findPageByUid(begin,pageSize,uid); //封装然后返回 pageBean.setList(list); return pageBean;
在dao层的实现类中查询需要的总记录数
并将商品的信息和订单项的信息封装的订单中由list带着订单返回
首先返回查询的总记录数,这个很简单
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());String sql = "select count(*) from orders where uid = ?";Object [] params = {uid}; QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); String sql = "select count(*) from orders where uid = ?"; Object [] params = {uid}; Long count = (Long) qr.query(sql, new ScalarHandler(), params); return count.intValue();
下面是返回封装了订单项商品信息的List<order>
//首先查询出在当前页面下的所有的order信息,但是这个order中没有具体的订单项信息 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); String sql = "select * from orders where uid = ? order by ordertime desc limit ?,?"; Object [] params = {uid,begin,pageSize}; List<Order> list = qr.query(sql, new BeanListHandler<Order>(Order.class), params); //遍历order将订单项和商品的详细信息封装到一个map集合 for (Order order : list) { sql = "select * from orderitem o,product p where o.pid=p.pid and o.oid=?"; List<Map<String, Object>> oList = qr.query(sql, new MapListHandler(), order.getOid()); for (Map<String, Object> map : oList) { //封装查询出来的数据到product和orderitem表中 Product p = new Product(); BeanUtils.populate(p, map); OrderItem o = new OrderItem(); BeanUtils.populate(o, map); o.setProduct(p); order.getOrderItems().add(o); } } return list;