`
endual
  • 浏览: 3559495 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用 HibernateTemplate 实现分页查询(转)

阅读更多
2011-01-24
使用 HibernateTemplate 实现分页查询
文章分类:Java编程
/*** 使用hql 语句进行操作
* @param hql HSQL 查询语句
* @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;}

=======================================

Spring 整合 Hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate的回调机制扩展 hibernateTemplate的功能实现分页

/**
* 使用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,实现分页查询 (回调)

在使用hibernate时,可以用query.setMaxResults(10);
query.setFirstResult(130);方便的实现分页,不过spring的HibernateTemplate没有这个功能,可以用回调实现.public List findUsers(final int firstResult, final int maxResults) {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s)
throws HibernateException, SQLException {
String q = "from User as user";
Query query = s.createQuery(q);
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
List list = query.list();
return list;
}
});
}


/**
* 使用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);
}
criteria.setFirstResult(offset);
criteria.setMaxResults(length);
return criteria.list();
}
});
return list;
}

============================================

hxzon

public List getCategorys(final int currentpage, final int pagesize) {
log.debug("finding all ShbbsCategory instances");

   List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "from ShbbsCategory";
Query query = session.createQuery(hql);
query.setFirstResult((currentpage - 1) * pagesize);
query.setMaxResults(pagesize);
List list = query.list();
return list;
}
});
return list;

}

public int getCount() {
int count = 0;

   List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "SELECT COUNT(p.id) from ShbbsCategory AS p ";
Query query = session.createQuery(hql);
List list = query.list();
return list;
}
});

   if (list.size() > 0) {
count = (Integer) list.get(0);
}
return count;
}

public List getCategorysByLike(final String cond, final int currentpage,
final int pagesize) {

   List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "FROM ShbbsCategory AS p WHERE p.uid LIKE ? OR p.name LIKE ?";
Query query = session.createQuery(hql);
query.setString(0, "%" + cond + "%");
query.setString(1, "%" + cond + "%");
query.setFirstResult((currentpage - 1) * pagesize);
query.setMaxResults(pagesize);
List list = query.list();
return list;
}
});
return list;

}

public int getByLikeCount(final String cond) {

   int count = 0;

   List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "SELECT COUNT(p.id) from Person AS p WHERE p.uid LIKE ? OR p.name LIKE ?";
Query query = session.createQuery(hql);
query.setString(0, "%" + cond + "%");
query.setString(1, "%" + cond + "%");
List list = query.list();
return list;
}
});

   if (list.size() > 0) {
count = (Integer) list.get(0);
}
return count;

}

原来使用getHibernateTemplate().getSessionFactory().getSession()来取得session运行期会出错。
分享到:
评论

相关推荐

    S2SH购物车+HibernateTemplate分页

    在S2SH购物车项目中,持久层的分页功能是通过Hibernate和HibernateTemplate实现的。这通常涉及到使用Criteria、Query或HQL语句配合FirstResult和MaxResults参数来限制返回的结果集大小,从而达到分页效果。这样的...

    getHibernateTemplate分页-模糊查询

    在Hibernate中,可以使用`setFirstResult`和`setMaxResults`来实现分页。 **示例代码**: ```java public Iterator getInfos(int position, int length) throws Exception { Iterator iterator = null; String ...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    在`Criteria`中,我们可以使用`setFirstResult()`设置起始行,`setMaxResults()`限制返回结果的数量,实现分页。而在`HQL`中,同样可以结合这两个方法达到同样的效果。 然后,来看**位置参数查询**,也称为预编译...

    hibernateTemplate

    通过结合`find`方法使用,可以实现高效的分页查询功能。 ##### 3. 命名查询支持 `HibernateTemplate`还支持命名查询功能,这是一种预先定义好的查询方式,可以在Hibernate配置文件中预先定义好查询语句及其名称,...

    JQuery,ajax,hibernate+spring,分页查询.rar

    综合来看,这个压缩包包含了一系列关于使用JQuery实现Ajax分页和查询,以及Hibernate和Spring整合进行分页查询的教程和实例代码。对于学习和理解这些技术在实际项目中的应用,这些资源是非常宝贵的。开发者可以通过...

    HibernateTemplate的用法总结

    // 使用HibernateTemplate查询所有Person return getHibernateTemplate().find("from Person"); } // 根据ID获取Person public Person getPersonById(int personId) { return (Person) getHibernateTemplate...

    HibernateTemplate 的常规用法.doc

    9. `void setMaxResults(int maxResults)`: 用于设置查询结果的分页大小,实现数据检索的优化。 在实际应用中,DAO(Data Access Object)类通常会使用HibernateTemplate。例如,以下是一个简单的`PersonDAOImpl`类...

    Hibernate分页查询

    `queryForPage`方法通过`HibernateTemplate`的`executeFind`方法执行HQL查询并进行分页,利用`setFirstResult`设置起始索引(即偏移量),`setMaxResults`设置每页显示的记录数。而`getAllRowCount`方法则通过`find`...

    SSH实现分页查

    ### SSH实现分页查询知识点详解 #### 一、概述 在软件开发中,尤其是在Web应用领域,对数据库的高效查询是非常重要的。随着数据量的增长,单一的查询方式往往难以满足性能需求,特别是在需要处理大量数据时。为了...

    SSH基础上分页功能的实现

    2. **实现分页查询**:在`MemberDaoImpl`中,使用`HibernateDaoSupport`提供的`getHibernateTemplate().find(hql)`获取所有记录,然后通过`setFirstResult()`和`setMaxResults()`设置分页参数。这两个方法分别对应于...

    基于spring+hibernate的组合查询+分页组件

    在Hibernate中,我们可以通过设置FirstResult(对应于SQL的LIMIT开始位置)和MaxResults(对应于SQL的LIMIT大小)参数来实现分页查询。 以下是一个简单的示例,展示如何在Spring和Hibernate中实现组合查询和分页: ...

    spring+struts+hibernate实现分页

    以下将详细讲解如何使用这三个框架实现分页功能。 首先,Spring作为核心的依赖注入(DI)和面向切面编程(AOP)框架,负责管理应用程序的组件,包括SessionFactory的创建和管理。在配置文件中,我们可以通过Spring...

    S2SH分页实现

    在DAO层,我们需要根据PageBean的参数来编写SQL查询,例如使用`LIMIT`和`OFFSET`在MySQL中实现分页。Spring的`HibernateTemplate`或`Session`对象可以帮助我们执行SQL并返回结果。 ```java public PageBean&lt;User&gt; ...

    SSH整合开发中的分页显示

    在DAO层的实现类`MemberDaoImpl`中,`queryForPage`方法利用`HibernateTemplate`的`executeFind`方法,通过传入一个`HibernateCallback`的匿名内部类来执行HQL,并设置分页参数`setFirstResult`和`setMaxResults`。...

    自己写的万能分页

    最后,使用`setFirstResult()`和`setMaxResults()`方法来指定查询的起始位置(基于0)和每页的记录数,从而实现分页。 2. **无参数分页方法** `selectByPage()`: 这个方法与`selectByPages()`相似,但没有`params...

    SSH分页组件

    Spring提供了JdbcTemplate和HibernateTemplate等工具类,它们支持简单的分页查询。通过设置startRow和maxRows参数,可以实现数据库的分页查询。同时,Spring Data JPA和Spring Data MongoDB等子项目还提供了更高级...

    struts+hibernate+spring框架整合做分页

    4. 实现分页模型:创建一个包含当前页、总页数、每页记录数等属性的分页对象。 5. 更新JSP视图:展示分页链接,根据用户选择的页码发送请求,并显示对应的分页结果。 6. 使用Spring的AOP进行事务管理:确保在处理...

    真是一个很好的分页例子

    在SSH(Spring、Struts2、Hibernate)框架...通过在DAO层设计合适的接口和实现,可以轻松地实现分页查询,并通过封装的`PageBean`类将分页信息传递给前端。这种方法既保持了代码的整洁,又保证了分页功能的高效和灵活。

    一些常用的JSP分页技术

    - 使用SQL查询语句实现分页。 ```jsp ! int curpage = 1; // 当前页 int page_record = 20; // 每页显示记录数 %&gt; curpage = Integer.parseInt(request.getParameter("page")); // 获取请求页码 ResultSet...

    对hibernate的封装 HibernateTemplate

    5. **查询和结果集处理**:提供了丰富的查询方法,如`find()`, `load()`, `get()`等,以及方便的结果集转换和分页功能。 6. **Callback机制**:通过HibernateCallback接口,可以在Hibernate Session内部执行自定义...

Global site tag (gtag.js) - Google Analytics