关于hibernate分页的方法目前个人总结了下有两种方式,如果有另外的方式请大家拿出来一起探讨探讨
第一种就是qbc查询中的带的分页功能
此类用于action里面的调用,actionSupport类
package cn.edu.njau.nps.struts;
import cn.edu.njau.nps.hibernate.HibernateDao;
public class ActionSupport extends com.opensymphony.xwork2.ActionSupport {
private static final long serialVersionUID = -2336832830904672208L;
protected static final int DEFAULT_PAGE_SIZE = 20;
/**
* 页数
*/
protected int currentPage, lastPage;
/**
* 第一个结果
*/
protected int firstResult;
/**
* 一次获取的结果数
*/
protected final int maxResults;
protected HibernateDao hibernateDao;
public ActionSupport() {
maxResults = DEFAULT_PAGE_SIZE;
}
public ActionSupport(int maxResults) {
super();
this.maxResults = maxResults;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int page) {
this.currentPage = page;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public HibernateDao getHibernateDao() {
return hibernateDao;
}
public void setHibernateDao(HibernateDao hibernateDao) {
this.hibernateDao = hibernateDao;
}
protected void calculatePage() {
firstResult = currentPage * maxResults;
}
}
action类里面的方法用于页面计算总共页数和记录行数,
DetachedCriteria Countcriteria = DetachedCriteria
.forClass(Knowledge.class);//产生计算分页的criteria
int rowCount = DataAccessUtils.intResult(getHibernateTemplate()
.findByCriteria(
Countcriteria.setProjection(Projections.rowCount())));//计算记录行数
lastPage = (rowCount - 1) / maxResults;//计算总共的页数
第二种方法采用hql语句里面自带的分页功能
*/
public List<Knowledge> getKnowledgeListByKeyAndName(final String namePass,
final String keyWord, final int firstResult, final int maxResults) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "from Knowledge k where k.base.name=:namePass "
+ "and (k.question like :question or k.answer like :answer)";
Query query = session.createQuery(hql);
query.setString("namePass", namePass);
query.setString("question", "%" + keyWord + "%");
query.setString("answer", "%" + keyWord + "%");
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
List list = query.list();
return list;
}
});
return list;
}
另外这个方法中我不知道使用了HibernateCallback()到底干嘛用的
目前自己总结了这两个方法。