您的位置:首页 > 其它

分页总结

2013-11-10 00:16 411 查看
1、页面视图类--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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web 总结 分页