如何使用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;
}
|
分享到:
相关推荐
总的来说,"S2SH购物车+HibernateTemplate分页"项目是一个综合性的学习资源,涵盖了Java Web开发中的关键技术和实践,对于理解SSH框架的整合和实际应用具有很高的参考价值。通过这个项目,开发者可以深入理解如何在...
通过结合`find`方法使用,可以实现高效的分页查询功能。 ##### 3. 命名查询支持 `HibernateTemplate`还支持命名查询功能,这是一种预先定义好的查询方式,可以在Hibernate配置文件中预先定义好查询语句及其名称,...
HibernateTemplate是Spring框架提供的一种操作Hibernate的方式,它简化了Hibernate的使用过程,使开发者无需关注Session的管理与事务控制,极大地提高了开发效率。本文将对HibernateTemplate的主要用法进行详细介绍...
在SSH基础上实现分页功能,主要是为了处理大数据量的查询结果,提高用户体验,避免一次性加载过多数据导致页面加载缓慢或者内存压力过大。下面将详细讲解SSH框架下分页功能的原理和实现步骤。 首先,理解分页的基本...
本文详细介绍了如何使用`getHibernateTemplate()`方法结合Spring框架进行分页查询和模糊查询。这些技术在实际项目中非常实用,能够有效提升数据库操作的效率。同时,通过Spring框架提供的`HibernateTemplate`,可以...
在Java Web开发中,分页功能是非常常见的一种需求,特别是在处理大量数据时,为了提高用户体验和加载速度,通常会将数据分批展示。在SSH2(Struts2、Spring、Hibernate)框架中,实现分页的方法多种多样,但自定义...
在这个项目中,“struts+hibernate+spring框架整合做分页”意味着我们将探讨如何在整合这三大框架的基础上实现一个高效且灵活的分页功能。 首先,Struts框架是MVC(Model-View-Controller)设计模式的一种实现,它...
在这个场景中,"SSH分页组件"指的是在SSH框架下实现数据分页功能的组件。 分页是Web应用中常见的需求,特别是在处理大数据量时,为了提高用户体验和系统性能,需要将结果集分割成多个小部分(页)进行显示。SSH分页...
5. **查询和结果集处理**:提供了丰富的查询方法,如`find()`, `load()`, `get()`等,以及方便的结果集转换和分页功能。 6. **Callback机制**:通过HibernateCallback接口,可以在Hibernate Session内部执行自定义...
在DAO层的实现类`MemberDaoImpl`中,`queryForPage`方法利用`HibernateTemplate`的`executeFind`方法,通过传入一个`HibernateCallback`的匿名内部类来执行HQL,并设置分页参数`setFirstResult`和`setMaxResults`。...
`queryForPage`方法通过`HibernateTemplate`的`executeFind`方法执行HQL查询并进行分页,利用`setFirstResult`设置起始索引(即偏移量),`setMaxResults`设置每页显示的记录数。而`getAllRowCount`方法则通过`find`...
在这个例子中,我们将探讨如何实现基于Hibernate的分页功能,以及如何在DAO层和业务逻辑层进行交互。 首先,我们需要在DAO层设计接口。在`MemberDao`接口中,定义了两个核心方法,用于处理分页查询和获取总记录数。...
在这个特定的讨论中,我们聚焦于SSH1中的一个关键概念:通用泛型DAO(Data Access Object)以及分页功能的实现。DAO层是模型层和数据访问层之间的桥梁,它的主要职责是处理数据库操作,为业务层提供无状态的数据访问...
当这两个框架结合使用时,通常会遇到如何更好地整合两者的问题,其中`HibernateDaoSupport`和`HibernateTemplate`就是两个关键的概念。 #### 二、HibernateTemplate `HibernateTemplate`是Spring提供的用于简化...
在`描述`中提到的“利用JQuery方便实现基于Ajax的数据查询、排序和分页功能”,意味着JQuery提供了便捷的方法来更新页面内容而无需刷新整个页面,通过Ajax与服务器进行异步通信。`Ajax`(Asynchronous JavaScript ...
通过上述介绍,我们可以看到,无论是使用Hibernate这样的ORM框架还是传统的JSP+Servlet技术,都可以实现高效的分页功能。不同的技术选型适用于不同的应用场景: - **Hibernate + Spring**:适用于大型项目或对性能...
在实际使用中,继承自 HibernateDaoSupport 的 DAO 类可以通过重写其提供的方法,利用 HibernateTemplate 提供的便利功能,实现对业务对象的 CRUD 操作。例如,下面是一些使用 HibernateDaoSupport 的示例方法: ``...
### SSH分页功能实现 #### 一、概述 SSH(Struts+Spring+Hibernate)是Java Web开发领域中一种常见的三层架构模式,其中Struts负责表现层,Spring负责业务逻辑层,而Hibernate则用于数据持久化层。在实际项目开发...
分页功能是大型Web应用中不可或缺的一部分,它能够有效地管理大量数据,提高用户体验,并减轻服务器负载。本教程将深入探讨如何在Hibernate和Spring集成环境中实现分页功能。 首先,我们需要了解Hibernate和Spring...
本示例着重讲解如何在S2SH框架下实现分页功能,这对于处理大量数据的展示和管理至关重要,能够提高用户体验并减轻服务器负载。 首先,我们来了解Struts2、Hibernate和Spring各自的角色: 1. **Struts2**:作为MVC...