`
b_l_east
  • 浏览: 639194 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HibernateTemplate 使用Example方式 查询满足条件的记录总数

阅读更多

今天做玩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();
			}
		});
	} 
分享到:
评论
1 楼 qq315737546 2011-08-11  
hibernateTemplate.executeFind(new HibernateCallback(){
  public Object doInHibernate(Session session)throws HibernateException, SQLException {
  Query query = session.createQuery("select count(*) from Object o"+ "条件")
Long total = (Long)query.uniqueResult();
return total;

相关推荐

    HibernateTemplate详细描述以及使用范围

    - **按条件查询记录**: ```java Person person = (Person) hibernateTemplate.get(Person.class, 1L); ``` - **插入记录**: ```java hibernateTemplate.save(new Person("张三", "123456789")); ``` - **...

    关于使用HibernateTemplate

    ### 关于使用HibernateTemplate #### 一、简介与背景 在Java企业级应用开发中,持久层技术扮演着至关重要的角色。其中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,极大地简化了数据访问层的...

    HibernateTemplate的方法使用

    - 在这种方式下,我们直接使用 DataSource 来创建 SessionFactory,并从 SessionFactory 创建 HibernateTemplate。 3. **直接获取并使用**: - 这种方式较为简单,直接通过现有的 SessionFactory 获取 ...

    HibernateTemplate的用法总结

    HibernateTemplate是Spring框架提供的一种操作Hibernate的方式,它简化了Hibernate的使用过程,使开发者无需关注Session的管理与事务控制,极大地提高了开发效率。本文将对HibernateTemplate的主要用法进行详细介绍...

    hibernateTemplate

    `HibernateTemplate`还支持命名查询功能,这是一种预先定义好的查询方式,可以在Hibernate配置文件中预先定义好查询语句及其名称,然后在程序中直接调用这些命名查询,提高了代码的可读性和可维护性。 #### 四、...

    HibernateTemplate 的常规用法.doc

    《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...

    hibernateTemplate的常用方法

    通过上述介绍,我们可以看到`HibernateTemplate`的强大之处在于它不仅简化了Hibernate的集成与使用,还提供了一系列实用的方法来满足不同的业务需求。在实际项目开发中,合理利用这些方法可以大大提升开发效率和代码...

    HibernateTemplate汇总

    HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...

    HibernateTemplate分组统计

    可以考虑使用参数化查询等方式提高安全性。 2. **性能优化**:对于大型数据表,分组统计可能会导致性能瓶颈。可以通过索引优化、合理设计数据模型等手段来提高查询效率。 3. **异常处理**:在实际应用中,应增加适当...

    HibernateTemplate类的使用

    ### HibernateTemplate类的使用详解 #### 一、引言 在Java开发中,持久层框架Hibernate因其优秀的ORM(Object-Relational Mapping)特性被广泛应用。为了更便捷地使用Hibernate,Spring框架提供了一系列工具类来简化...

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

    本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...

    hibernateTemplate批量删除数据

    HQL是一种面向对象的查询语言,它允许开发者以面向对象的方式编写查询语句,而无需关心底层数据库的具体实现。下面通过一个示例来展示如何使用`HibernateTemplate`的`bulkUpdate()`方法实现批量删除: ```java ...

    HibernateTemplate的简单示例

    HibernateTemplate的简单示例

    HibernateTemplate源代码

    `HibernateTemplate`是Spring框架提供的一个强大的工具,它不仅简化了Hibernate的使用,还提供了异常转换、资源管理等功能,使得开发人员能够更加专注于业务逻辑的编写。通过对`HibernateTemplate`的学习和使用,...

    hibernateTemplate常用方法.htm

    hibernateTemplate常用方法.htm

    SSH2增删改查使用HibernateTemplate

    查询操作较为复杂,因为有多种查询方式。`find()`方法可以配合HQL(Hibernate Query Language)或者SQL进行复杂查询。简单的按主键查询可以这样实现: ```java public User getUserById(Long userId) { return ...

    getHibernateTemplate分页-模糊查询

    模糊查询通常用于根据部分匹配条件来查找记录。在Hibernate中,可以使用`like`语句来实现模糊查询。 **示例代码**: ```java public Iterator searchByKeyword(String keyword) throws Exception { Iterator ...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    2. HibernateTemplate:这是Spring提供的一个辅助类,它封装了SessionFactory的一些常用操作,如保存、更新、删除和查询等。使用HibernateTemplate可以简化代码,避免直接与Session对象打交道,减少出错的可能性。 ...

    简单封装 HibernateTemplate 各项功能

    GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。

Global site tag (gtag.js) - Google Analytics