我的订单

在点击我的订单会跳转到一个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;
原文地址:https://www.cnblogs.com/learnjfm/p/7017169.html