`
b_l_east
  • 浏览: 636862 次
  • 性别: 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;

相关推荐

Global site tag (gtag.js) - Google Analytics