1、分页功能的实现
设计一个分页的模型
public class PageBean<T> {
private Integer currPage; //当前页数
private Integer pageSize; //每页的大小
private Integer totalCount; //总数
private Integer totalPage; //总页数
private List<T> list; //每页查到的数据的集合
//由于篇幅关系,省略了set、get方法
}
Controller层:
//分页查询用户
public String findAll(){
//接收分页参数
//使用DetechedCriteria对象查询
DetachedCriteria detachedcriteria=DetachedCriteria.forClass(Student.class);
//返回一个分页模型
PageBean<Student> pageBean=studentService.findByPage(detachedcriteria,currpage,pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
System.out.println(pageBean.getList().size());
return "findAll";
}
因为是使用hibernate进行dao,所以在这里设定了一个 DetachedCriteria 离线查询条件。然后调用service层的findByPage方法,并将detachedcriteria、当前的页码(从页面上获取)、每页的条数(从页面获取)传递到service进行处理,
在执行完service的findByPage方法后返回 PageBean实例,然后将实例推入到值栈中,以便在页面上取出数据。
Service层:
//分页查询
@Override
public PageBean<Student> findByPage(DetachedCriteria detachedcriteria, Integer currpage,Integer pagesize) {
// TODO Auto-generated method stub
PageBean<Student> pageBean=new PageBean<Student>();
//每页显示记录数
pageBean.setPageSize(pagesize);
//显示当前页数
pageBean.setCurrPage(currpage);
//总记录数
//调用DAO
Integer totalCount=studentDao.findCount(detachedcriteria);
pageBean.setTotalCount(totalCount);
//总页数
Integer totalPage=(totalCount/pagesize)+1;
pageBean.setTotalPage(totalPage);
//查询当前页的数据
Integer begin=(currpage - 1) * pagesize;
List<Student> list=studentDao.findByPage(detachedcriteria,begin,pagesize);
pageBean.setList(list);
//返回pagebean模型
return pageBean;
}
在service层需要 设定pagebean的实例对象,然后将对象的值填充完整,其中 pagesize、currpage是传入时自带的,totalCount、list 需要调用Dao 来获取。数据填充完整后,将对象返回给上层的Controller层即可。
Dao层:
//统计符合条件的学生个数的方法
@Override
public Integer findCount(DetachedCriteria detachedcriteria) {
// TODO Auto-generated method stub
detachedcriteria.setProjection(Projections.rowCount());
List<Long> list=(List<Long>) hibernateTemplate.findByCriteria(detachedcriteria);
if(list.size()>0){
return list.get(0).intValue();
}
return null;
}
//查询符合条件的单页的学生信息
@Override
public List<Student> findByPage(DetachedCriteria detachedcriteria, Integer begin, Integer pagesize) {
// TODO Auto-generated method stub
detachedcriteria.setProjection(null);
return (List<Student>) hibernateTemplate.findByCriteria(detachedcriteria,begin,pagesize);
}
Dao层需要实现两个方法,分别返回符合条件的学生的总数 和 单页的学生信息
注意:在第一个方法执行时,detachedcriteria 设置了setProjection(Prodections.rowCount),在第二个方法执行时,条件仍然是上一个方法中的detachedcriteria,所以需要setProjection(null)来重置。
以上是Controller、Service、Dao层上的编写,接下来要做的只是将pageBean 中的数据显示在页面中即可。