如何使用HibernateTemplate进行分页功能
在使用Hibernate时,可以用
query.setFirstResult(130);//设置取值的开始位置
query.setMaxResults(10); //设置读取数据的记录条数
方便的实现分页。
但是Spring 整合 Hibernate 时候用的 HibernateTemplate 却不支持分页,这样当查询记录过多时,就会给我们带来一些麻烦,因此需要自己包装一个类进行分页,具体实现如下:
使用spring的hibernateTemplate的回调机制扩展hibernateTemplate的功能实现分页。其中HibernateCallback()是一个接口,这种回调方式也是在java中常用的方法。
/**
* 使用hql 语句进行操作
* @param hql 需要执行的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;
}
|
这样就实现了HibernateTemplate的分页,在实际编程中,代码还可以优化一下,把着色部分的代码再写成一个工具类,以后只用调用这个工具类中的方法就行了,把这个方法写成静态的,以后就可以不new对象就可以拿类名加方法名直接调用就可以了。下面就把优化的代码贴一下:
package com.huitu.khms.util;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
/**
*本工具类主要用来实现分页
*/
public class PageNoUtil {
/**
* @param session :一个会话
* @param hql:是需要执行的hql语句,
* @param offset 设置开始位置
* @param length:读取记录条数
* return 返回结果集List<?>表示一个泛型的List
*/
public static List<?> getList( Session session , String hql , int offset, int length){
Query q = session.createQuery(hql);
q.setFirstResult(offset);
q.setMaxResults(length);
log.info(hql);
List<?> list = q.list();
log.info("取到的每页的size"+list.size());
return list;
}
}
|
因为这几行代码是每个分页功能都会用到的,这样每用到分页功能的时候就可以调用这个方法了,那上面分页功能的代码也可以精简为:
/**
* 使用hql 语句进行操作
* @param hql 需要执行的hql语句
* @param offset 设置开始位置
* @param length 设置读取数据的记录条数
* @return List 返回所需要的集合。
*/
public List getListForPage(final String hql, final int offset,
final int length) {
List list1 = getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
List list2 = PageNoUtil. getList(session,hql,offset,length);
return list2;
}
});
return list1;
}
|
分享到:
相关推荐
关于使用HibernateTemplate
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。
运行环境JDK6+myeclipse8.6+tomcat6.0,jar包完整,导入之后可以直接跑起来。
对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等
HibernateTemplate的方法部分使用,还有部分的个人见解,有错的,请指出,谢谢
spring HibernateTemplate汇总
hibernateTemplate的常用方法
HibernateTemplate 的常规用法.doc HibernateTemplate 的常规用法.doc
SSH2增删改查使用HibernateTemplate
getHibernateTemplate分页-模糊查询.hibernate查询以及分页查询等方法使用。
HibernateTemplate类的使用
HibernateTemplate的简单示例
HibernateTemplat技术,此文档详细描述了HibernateTemplate的方法及功能说明,并有实例。
HibernateTemplate的用法总结,我自己整理的,仅供参考
hibernateTemplate常用方法.htm
HibernateTemplate源代码
Spring整合hibernate(2)之基于HibernateTemplate的整合,jar需要自己添加!
JavaWeb开发,Sping框架,才用Hibernate Template进行字段截取,分组统计实现方法。
对于Hiberante对数据库种数据删除操作的归纳