OA项目 分页功能总结一中,我们的Hql语句相对较为简单,只能满足较少的用户需求,而且由于每条hql语句都不一样,业务逻辑需要重写,给我们的工作带来也很大的麻烦;
因此,我们今天准备将公共的代码抽取出来,放在baseDao中,来减少我们的一些代码。当然,这也不是我们最终的分页结果。现在我们接着上一次的内容进行:
1.在Action如(TopicAction)中,我们将上次Action中的代码改为:
准备主题列表的分页信息(使用公共的方法)String hql = "FROM Topic t WHERE t.forum=? ";
Object[] parameters = new Object[] { forum };
PageBean pageBean = replyService.getPageBean(pageNum, hql, parameters);
ActionContext.getContext().getValueStack().push(pageBean);
2.在baseDaoService中实现getPageBean(pageNum, hql, parameters);replyService继承它
public PageBean getPageBean(int pageNum,String hql, Obeject[] parameters){
int currentPage=pageNum;
Query listQuery=getSession.createQuery(hql);
for (int i = 0; i < parameters.length; i++) {
listQuery.setParameter(i, parameters[i]);
}
}
listQuery.setFirstResult((pageNum - 1) * pageSize);
listQuery.setMaxResults(pageSize);
List list = listQuery.list(); // 执行查询
// 查询总记录数
Query countQuery = getSession().createQuery("SELECT COUNT(*) " + queryListHQL);
if (parameters != null && parameters.length > 0) { // 设置参数
for (int i = 0; i < parameters.length; i++) {
countQuery.setParameter(i, parameters[i]);
}
}
Long count = (Long) countQuery.uniqueResult(); // 执行查询
return new PageBean(pageNum, pageSize, list, count.intValue());
}
}
改进完成!!!