分页总结
2013-11-10 00:16
411 查看
1、页面视图类--PageView:即在页面看到的分页的各个属性及页面看不到,但需要用到的属性,如当前页、总记录数、总页数、记录列表等;
2、分页处理方式的抽象过程:
2.1、每个实现方法都创建查询对象
2.2、把创建查询对象抽象出来,通过getPageView封装
2.4、action 中可以直接设置SQL值,并返回PageView对象
2、分页处理方式的抽象过程:
2.1、每个实现方法都创建查询对象
2.2、把创建查询对象抽象出来,通过getPageView封装
/** * 通用的查询分页信息的方法 * @param hql * @param params * @param pageNum * @return */ public PageView getPageView(String hql,Object[] params,int pageNum){ //设置查询字符串 Query countQuery = getSession().createQuery("SELECT COUNT(*)" + hql); //设置参数 for (int i = 0; i < params.length; i++) { countQuery.setParameter(i, params[i]); } //查询出总记录数 int recordCount = ((Number)countQuery.uniqueResult()).intValue(); //------------------------// //查询分页列表 Query listQuery = getSession().createQuery(hql + " ORDER BY m.sendTime DESC"); //设置参数 for (int i = 0; i < params.length; i++) { listQuery.setParameter(i, params[i]); } List<Message> list = listQuery.setFirstResult((pageNum-1) * MyConfiguration.getPageSize()) .setMaxResults(MyConfiguration.getPageSize()).list(); PageView pageView = new PageView(pageNum, MyConfiguration.getPageSize(), recordCount, list); return pageView; }封装以后原来的实现方法变为如下形式:此时的缺点是查询不同对象的记录时,需要写不同的SQL语句,而这些语句结构都是相同的,所以必须再把语句进行封装。
/** * 草稿箱列表(分页) */ public PageView getDraftBoxListPageView(User currentUser, int pageNum) { return getPageView("FROM Message m WHERE m.status = ? AND m.sender = ?",new Object[]{Message.STATUS_NOT_SENDED,currentUser}, pageNum); }2.3、通过QueryBuilder对SQL语句进行封装,故getPageView(String hql,Object[] params,int pageNum)可变为getPageView(QueryView qv,int pageNum),并把它移至DaoBaseImpl中所有业务方法都可以使用
2.4、action 中可以直接设置SQL值,并返回PageView对象
/** 草稿箱* */ public ActionForward draftBox(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 记录特征:未发送、发送人为当前登录用户 // User user = getCurrentUser(request); // List<Message> draftBoxList = messageService.getDraftBoxList(user); // // request.setAttribute("draftBoxList", draftBoxList); int pageNum = getPageNum(request); User currentUser = getCurrentUser(request); //拼接SQL语句 QueryBuilder queryBuilder = new QueryBuilder(Message.class); queryBuilder.addWhereCondition("this.status=?", Message.STATUS_NOT_SENDED) .addWhereCondition("this.sender=?", currentUser) .addOrderProperty("this.sendTime", true); //这里的getPageView是DaoBaseImpl中的 PageView pageView = messageService.getPageView(queryBuilder, pageNum); request.setAttribute("pageView", pageView); return mapping.findForward("listDraftBox"); }
相关文章推荐
- Extjs4.0 最新最全视频教程
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- 防止网页脚本病毒执行的方法-from web
- 自学成才的秘密:115个 web Develop 资源
- 十万条Access数据表分页的两个解决方法
- 使用批处理修改web打印设置笔记 适用于IE
- Apache Web让JSP“动”起来
- web下载的ActiveX控件自动更新
- 推荐六款WEB上传组件性能测试与比较第1/10页
- 关于三种主流WEB架构的思考
- sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
- 高效的mysql分页方法及原理
- asp又一个分页的代码例子
- 用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
- web标准知识——从p开始,循序渐进
- web标准知识――用途相似的标签
- 透彻掌握ASP分页技术很详细的分析
- 一条SQL语句搞定Sql2000 分页
- 分页 SQLServer存储过程