hibernate怎么做分页

我使用HibernateTemplate的,怎么做分页,给段代码吧doInHibernate(Session session)这个方法,我怎么调用,怎么传参数啊,我没有session工厂类
 
 

 

 
**
* 使用hql 语句进行操作
 
* @param hql
* @param offset
* @param length
* @return List
*/
public List getListForPage(final String hql, final int offset,
final int length) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}/**
* 使用criterion进行操作
* @param arg
* @param criterions
* @param offset
* @param length
* @return List
*/
protected List getListForPage(final Class arg, final Criterion[] criterions,final int offset, final int length) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(arg);
//循环遍历添加约束条件
for (int i = 0; i < criterions.length; i++) {
criteria.add(criterions[i]);
}
criteria.setFirstResult(offset);
criteria.setMaxResults(length);
return criteria.list();
}
});
return list;
 
你不是说你用HibernateTemplate了,如果你用的是spring的HibernateTemplate,那么就直接用就行了,如果你是自己写的template,
那你也应该会准备一个HibernateCallback类啊,这才是典型的模板加回调啊 
 
算了,把HibernateCallback也给你贴出来
 

 

import org.hibernate.HibernateException;
import org.hibernate.Session;
 
/*************************************
* 为 Hibernate 所提供的一个 回调接口,
* 此接口定义了 统一 Hibernate的业务操作;
* @author kenshin
*
*/
public interface HibernateCallback {
 
/**************************************
* 回调接口的回调方法,此方法使用者无需调用,
* 它由 模板类来进行回调,并传入一个 session参数,
* 以便让使用者完成相关业务
* @param ses
* @return 执行结果
* @throws HibernateException
*/
Object doInHibernate(Session ses)
throws HibernateException;
 
}
 
*************************************
hibernate分页
a,将查询的条件保存到session中,或用其它方式,只要能保证翻页时能再取出就可以了
b,数据库需要count一次总记录数,并取出结果集
c,自己写个PageUtil类,目的是根据总记录数能算出有多少页、上一页下一页都是什么,就够了,jsp页面根据这个pageutil类的信息来写翻页的导航,1234页之类的
 
每次根据不页码的信息(这个页码的信息应该是通过get方式得来,比如?page=3这样的参数)和以前存的查询条件,从数据库中再取出对应的结果集,应该是通过hibernate设置一下起始记录数、最大记录数
 
大概就是这样的,可能还有些细节没有说到,自己好好整理一下吧,希望能帮助到你
 
 
 
实际使用中,不建议使用hibernate分页操作,当然你的数据少的时候是可以的,当你数据量比较大时hibernate分页就会出现性能问题。
 
假如你的数据有10万级(在某种情况下,数据量上万条时都会有性能问题),想想如果你翻页到最后一页它会执行什么操作吧。看看你每次翻页时打印出来的SQL语句就明白了。
 
 
 
****************************
hibernate通用分页
谁能给一个hibernate的通用分页实例,要例子,可以直接在eclipse上运行
 
分页是有页面(前端,请求要显示哪些数据)和后台(提供前端需要的数据),Hibernate是一个持久层框架,它只能负责把你需要的数据从数据库中查询出来提供给你,org.hibernate.Query、org.hibernate.Criteria这两个接口中都提供了setFirstResult(int x),setMaxResults(int x)这两个方法,setFirstResult表示从查询得到的结果集的第几条开始获取,setMaxResults表示获取多少条数据,这样只要把页面想获取比如11-20之间的记录,只要把setFirstResult设置为10,setMaxResults设置为10即可
 
 
posted @ 2012-09-01 17:06  linux,dev  阅读(841)  评论(0编辑  收藏  举报