今天做玩SSH时,发现HibernateTemplate有findByExample()方法,但是返回的是满足输入JavaBean条件的所有JavaBean。如果我只想获取满足条件的记录总数,比如说,在分页的时侯,我要先查询一下总数,然后才能换算出分几页显示,这时如果使用findByExample().size()是不好的,特别是在数据量特别大的时侯。
然而Hibernate又没有提供类似countByExample()的方法,一般的方法是使用Query自己写条件,如果JavaBean的属性很多而又不确定哪些属性为null,那就惨了。我查看了一下findByExample()方法,发现完全可以仿照之写一个新的方法如下:
或许已经有其它方法了,但是俺还不太熟悉Spring,所以就将就用一下吧。
public int countByExample(final Object entityBean) {
Assert.notNull(entityBean, "Example entity must not be null");
return (Integer) getHibernateTemplate().executeWithNativeSession(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
//重点就是这个Criteria,属于Hibernate呵呵
Criteria criteria = s.createCriteria(entityBean.getClass())
.setProjection(Projections.projectionList()
.add(Projections.rowCount()))
.add(Example.create(entityBean));
//以下全是照抄HibernateTemplate的prepareCriteria方法,因为该方法是protected,
//不能在外部调用,所以抄了一遍
if (getHibernateTemplate().isCacheQueries()) {
criteria.setCacheable(true);
if (getHibernateTemplate().getQueryCacheRegion() != null)
criteria.setCacheRegion(getHibernateTemplate().getQueryCacheRegion());
}
if (getHibernateTemplate().getFetchSize() > 0)
criteria.setFetchSize(getHibernateTemplate().getFetchSize());
if (getHibernateTemplate().getMaxResults() > 0)
criteria.setMaxResults(getHibernateTemplate().getMaxResults());
SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());
return criteria.uniqueResult();
}
});
}
分享到:
相关推荐
- **按条件查询记录**: ```java Person person = (Person) hibernateTemplate.get(Person.class, 1L); ``` - **插入记录**: ```java hibernateTemplate.save(new Person("张三", "123456789")); ``` - **...
### 关于使用HibernateTemplate #### 一、简介与背景 在Java企业级应用开发中,持久层技术扮演着至关重要的角色。其中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,极大地简化了数据访问层的...
- 在这种方式下,我们直接使用 DataSource 来创建 SessionFactory,并从 SessionFactory 创建 HibernateTemplate。 3. **直接获取并使用**: - 这种方式较为简单,直接通过现有的 SessionFactory 获取 ...
HibernateTemplate是Spring框架提供的一种操作Hibernate的方式,它简化了Hibernate的使用过程,使开发者无需关注Session的管理与事务控制,极大地提高了开发效率。本文将对HibernateTemplate的主要用法进行详细介绍...
`HibernateTemplate`还支持命名查询功能,这是一种预先定义好的查询方式,可以在Hibernate配置文件中预先定义好查询语句及其名称,然后在程序中直接调用这些命名查询,提高了代码的可读性和可维护性。 #### 四、...
《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...
通过上述介绍,我们可以看到`HibernateTemplate`的强大之处在于它不仅简化了Hibernate的集成与使用,还提供了一系列实用的方法来满足不同的业务需求。在实际项目开发中,合理利用这些方法可以大大提升开发效率和代码...
HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...
可以考虑使用参数化查询等方式提高安全性。 2. **性能优化**:对于大型数据表,分组统计可能会导致性能瓶颈。可以通过索引优化、合理设计数据模型等手段来提高查询效率。 3. **异常处理**:在实际应用中,应增加适当...
### HibernateTemplate类的使用详解 #### 一、引言 在Java开发中,持久层框架Hibernate因其优秀的ORM(Object-Relational Mapping)特性被广泛应用。为了更便捷地使用Hibernate,Spring框架提供了一系列工具类来简化...
本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...
HQL是一种面向对象的查询语言,它允许开发者以面向对象的方式编写查询语句,而无需关心底层数据库的具体实现。下面通过一个示例来展示如何使用`HibernateTemplate`的`bulkUpdate()`方法实现批量删除: ```java ...
HibernateTemplate的简单示例
`HibernateTemplate`是Spring框架提供的一个强大的工具,它不仅简化了Hibernate的使用,还提供了异常转换、资源管理等功能,使得开发人员能够更加专注于业务逻辑的编写。通过对`HibernateTemplate`的学习和使用,...
hibernateTemplate常用方法.htm
查询操作较为复杂,因为有多种查询方式。`find()`方法可以配合HQL(Hibernate Query Language)或者SQL进行复杂查询。简单的按主键查询可以这样实现: ```java public User getUserById(Long userId) { return ...
模糊查询通常用于根据部分匹配条件来查找记录。在Hibernate中,可以使用`like`语句来实现模糊查询。 **示例代码**: ```java public Iterator searchByKeyword(String keyword) throws Exception { Iterator ...
2. HibernateTemplate:这是Spring提供的一个辅助类,它封装了SessionFactory的一些常用操作,如保存、更新、删除和查询等。使用HibernateTemplate可以简化代码,避免直接与Session对象打交道,减少出错的可能性。 ...
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。