Goods:我的订单查询分页
2015-09-08 15:58
459 查看
OrderDao
OrderService
OrderServlet
public PageBean<Order> findByUser(String uid, int pc) throws SQLException { List<Expression> exprList = new ArrayList<Expression>(); exprList.add(new Expression("uid", "=", uid)); return findByCriteria(exprList, pc); } private PageBean<Order> findByCriteria(List<Expression> exprList, int pc) throws SQLException { /* * 1. 得到ps * 2. 得到tr * 3. 得到beanList * 4. 创建PageBean,返回 */ /* * 1. 得到ps */ int ps = PageConstants.ORDER_PAGE_SIZE;//每页记录数 /* * 2. 通过exprList来生成where子句 */ StringBuilder whereSql = new StringBuilder(" where 1=1"); List<Object> params = new ArrayList<Object>();//SQL中有问号,它是对应问号的值 for(Expression expr : exprList) { /* * 添加一个条件上, * 1) 以and开头 * 2) 条件的名称 * 3) 条件的运算符,可以是=、!=、>、< ... is null,is null没有值 * 4) 如果条件不是is null,再追加问号,然后再向params中添加一与问号对应的值 */ whereSql.append(" and ").append(expr.getName()) .append(" ").append(expr.getOperator()).append(" "); // where 1=1 and bid = ? if(!expr.getOperator().equals("is null")) { whereSql.append("?"); params.add(expr.getValue()); } } /* * 3. 总记录数 */ String sql = "select count(*) from t_order" + whereSql; Number number = (Number)qr.query(sql, new ScalarHandler(), params.toArray()); int tr = number.intValue();//得到了总记录数 /* * 4. 得到beanList,即当前页记录 */ sql = "select * from t_order" + whereSql + " order by ordertime desc limit ?,?"; params.add((pc-1) * ps);//当前页首行记录的下标 params.add(ps);//一共查询几行,就是每页记录数 List<Order> beanList = qr.query(sql, new BeanListHandler<Order>(Order.class), params.toArray()); // 虽然已经获取所有的订单,但每个订单中并没有订单条目。 // 遍历每个订单,为其加载它的所有订单条目 for(Order order : beanList) { loadOrderItem(order); } /* * 5. 创建PageBean,设置参数 */ PageBean<Order> pb = new PageBean<Order>(); /* * 其中PageBean没有url,这个任务由Servlet完成 */ pb.setBeanList(beanList); pb.setPc(pc); pb.setPs(ps); pb.setTr(tr); return pb; } /* * 为指定的order载它的所有OrderItem */ private void loadOrderItem(Order order) throws SQLException { /* * 1. 给sql语句select * from t_orderitem where oid=? * 2. 执行之,得到List<OrderItem> * 3. 设置给Order对象 */ String sql = "select * from t_orderitem where oid=?"; List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler(), order.getOid()); List<OrderItem> orderItemList = toOrderItemList(mapList); order.setOrderItemList(orderItemList); } /** * 把多个Map转换成多个OrderItem * @param mapList * @return */ private List<OrderItem> toOrderItemList(List<Map<String, Object>> mapList) { List<OrderItem> orderItemList = new ArrayList<OrderItem>(); for(Map<String,Object> map : mapList) { OrderItem orderItem = toOrderItem(map); orderItemList.add(orderItem); } return orderItemList; } /* * 把一个Map转换成一个OrderItem */ private OrderItem toOrderItem(Map<String, Object> map) { OrderItem orderItem = CommonUtils.toBean(map, OrderItem.class); Book book = CommonUtils.toBean(map, Book.class); orderItem.setBook(book); return orderItem; }
OrderService
public PageBean<Order> myOrders(String uid,int pc) { try{ JdbcUtils.beginTransaction(); PageBean<Order> pb=orderDao.findByUser(uid, pc); JdbcUtils.commitTransaction(); return pb; }catch(SQLException e) { try { JdbcUtils.rollbackTransaction(); } catch (SQLException e1) { throw new RuntimeException(e); } } return null; }
OrderServlet
/** * 获取当前页码 * @param req * @return */ private int getPc(HttpServletRequest req) { int pc = 1; String param = req.getParameter("pc"); if(param != null && !param.trim().isEmpty()) { try { pc = Integer.parseInt(param); } catch(RuntimeException e) {} } return pc; } /** * 截取url,页面中的分页导航中需要使用它做为超链接的目标! * @param req * @return */ /* * http://localhost:8080/goods/BookServlet?methed=findByCategory&cid=xxx&pc=3 * /goods/BookServlet + methed=findByCategory&cid=xxx&pc=3 */ private String getUrl(HttpServletRequest req) { String url = req.getRequestURI() + "?" + req.getQueryString(); /* * 如果url中存在pc参数,截取掉,如果不存在那就不用截取。 */ int index = url.lastIndexOf("&pc="); if(index != -1) { url = url.substring(0, index); } return url; } /** * 我的订单 * @param req * @param resp * @return * @throws ServletException * @throws IOException */ public String myOrders(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 1. 得到pc:如果页面传递,使用页面的,如果没传,pc=1 */ int pc = getPc(req); /* * 2. 得到url:... */ String url = getUrl(req); /* * 3. 从当前session中获取User */ User user = (User)req.getSession().getAttribute("sessionUser"); /* * 4. 使用pc和cid调用service#findByCategory得到PageBean */ PageBean<Order> pb = orderService.myOrders(user.getUid(), pc); /* * 5. 给PageBean设置url,保存PageBean,转发到/jsps/book/list.jsp */ pb.setUrl(url); req.setAttribute("pb", pb); return "f:/jsps/order/list.jsp"; }
相关文章推荐
- Golang在京东列表页实践总结
- 11292 - Dragon of Loowater(贪心)
- Google Analytics自定义广告系列
- Beego环境搭建和bee工具安装使
- 算法系列(一) Google方程式
- 移除百度地图LOGO和版权信息
- Category添加属性
- Leetcode Algorithm No.242 Valid Anagram
- 【Django】template中实现加减乘除数学运算[加法 减法 乘法 除法]
- oc中protocol、category和继承的区别
- oc中protocol、category和继承的区别
- 【Django】 终端打印出错信息
- 【Django】 密码加密
- 【Django】 国际化
- [译]Google新logo是如何缩减13000字节的
- 【Django】 上传图片
- uva 11090 Going in Cycle!! 平均权值最小的回路
- 15条谷歌轶事
- 【音乐分享】Let Me Go
- Google Chrome 快捷方式