HibernateTemplate 只支持 .setMaxResults(int) 方法。因此,做 Spring+Hibernate 分页处理要使用到一个接口 org.springframework.orm.hibernate3.HibernateCallback来灵活操作数据库,该接口中有一个未实现的方法 Object doInHibernate (Session session),用以获得并利用 session 进行操作(自动创建、销毁)。
以下代码均参考了 使用 HibernateTemplate 实现分页查询 一文。
package springdao;
import hibernatedao.HibernateSessionFactory;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
/**
* 通用 DAO 包
* @author kiant
* @version Sep 7, 2008
*/
public class CommomsDAO {
private static final Log log = LogFactory.getLog(EcOpusDAO.class);
//获得会话
private static HibernateTemplate hibernateTemplate = new HibernateTemplate(HibernateSessionFactory.getSessionFactory());
/**
* 分页通用方法
* @param hql HQL查询语句
* @param offset 起始记录下标
* @param lengh 读取记录数
* @return List 结果集
*/
public static List getListForPage(final String hql, final int offset, final int lengh) {
log.debug("finding ListForPage");
try {
List list = hibernateTemplate.executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
List list2 = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(lengh)
.list();
return list2;
}});
return list;
} catch (RuntimeException re) {
log.error("find ListForPage failed", re);
throw re;
}
}
}
ps.
也可以通过:
this.getSession();
this.getHibernateTemplate().getSessionFactory().openSession();
分别获取 session 进行 createQuery()等操作。
但是这种做法,需要自己去手动关闭session的。所以你需要配置openSessioninview,不推荐使用!
分享到:
相关推荐
对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等
getHibernateTemplate分页-模糊查询.hibernate查询以及分页查询等方法使用。
关于使用HibernateTemplate
运行环境JDK6+myeclipse8.6+tomcat6.0,jar包完整,导入之后可以直接跑起来。
Hibernate中使用Criteria Query各种QBC查询
HibernateTemplate的方法部分使用,还有部分的个人见解,有错的,请指出,谢谢
SSH2增删改查使用HibernateTemplate
spring HibernateTemplate汇总
hibernateTemplate的常用方法
HibernateTemplate 的常规用法.doc HibernateTemplate 的常规用法.doc
HibernateTemplate类的使用
HibernateTemplate的简单示例
HibernateTemplate的用法总结,我自己整理的,仅供参考
hibernateTemplate常用方法.htm
Spring提供了org.springframework.orm.hibernate3.HibernateTemplate类和org.springframework.orm.hibernate3.HibernateCallback接口来方便和Hibernate整合。 HibernateTemplate类封装了Hibernate的主要类,它提供了...
HibernateTemplat技术,此文档详细描述了HibernateTemplate的方法及功能说明,并有实例。
HibernateTemplate源代码
Spring整合hibernate(2)之基于HibernateTemplate的整合,jar需要自己添加!
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。