hibernate中分页查询
PageBean相关的实体类
1、pageBean的创建
package com.itheima.bos.utils;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
/**
* 封装分页属性
* @author Lenovo
*
*/
public class PageBean {
private int currentPage;//当前页码
private int pageSize;//每页显示的记录数
private DetachedCriteria detachedCriteria;//查询条件
private int total;//总记录数
private List rows;//当前页需要展示的数据集合
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public DetachedCriteria getDetachedCriteria() {
return detachedCriteria;
}
public void setDetachedCriteria(DetachedCriteria detachedCriteria) {
this.detachedCriteria = detachedCriteria;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
}
2、通用方法中的Dao
/**
* 通用的分页查询方法
*/
@Override
public void pageQuery(PageBean pageBean) {
int currentPage=pageBean.getCurrentPage();
int pageSize=pageBean.getPageSize();
DetachedCriteria detachedCriteria=pageBean.getDetachedCriteria();
//查询total
detachedCriteria.setProjection(Projections.rowCount());//指定hibernate框架发出SQL的形式
List<Long> countList = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
Long count=countList.get(0);
pageBean.setTotal(count.intValue());
//查询rows
detachedCriteria.setProjection(null);//设置回来
int firstResult=(currentPage-1)*pageSize;
int maxResults=pageSize;
List rows = this.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);
pageBean.setRows(rows);
}
3、Action的实现
/**
* 查询所有的包括分页查询
* 返回的格式应该是json
* @throws IOException
*/
public String pageQuery() throws IOException{
PageBean pageBean=new PageBean();
pageBean.setCurrentPage(page);
pageBean.setPageSize(rows);
//创建离线提交查询对象
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Staff.class);
pageBean.setDetachedCriteria(detachedCriteria);
staffService.pageQuery(pageBean);
//使用json-lib将pageBean对象转为json,通过流出流写回页面
//JSONObject----将单一对象转为json
//JSONArray----将数组或者集合对象转为json
JsonConfig jsonConfig=new JsonConfig();
//指定哪些属性不需要转json
jsonConfig.setExcludes(new String[]{"currentPage","detachedCriteria","pageSize"});
String json = JSONObject.fromObject(pageBean,jsonConfig).toString();
ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
ServletActionContext.getResponse().getWriter().print(json);
return NONE;
}
4、页面的展示效果