今天做玩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();
}
});
}
分享到:
相关推荐
关于使用HibernateTemplate
对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等
HibernateTemplate的方法部分使用,还有部分的个人见解,有错的,请指出,谢谢
HibernateTemplate 的常规用法.doc HibernateTemplate 的常规用法.doc
spring HibernateTemplate汇总
hibernateTemplate的常用方法
HibernateTemplate类的使用
HibernateTemplate的简单示例
HibernateTemplate的用法总结,我自己整理的,仅供参考
HibernateTemplat技术,此文档详细描述了HibernateTemplate的方法及功能说明,并有实例。
hibernateTemplate常用方法.htm
HibernateTemplate源代码
Hibernate中使用Criteria Query各种QBC查询
JavaWeb开发,Sping框架,才用Hibernate Template进行字段截取,分组统计实现方法。
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。
Spring整合hibernate(2)之基于HibernateTemplate的整合,jar需要自己添加!
SSH2增删改查使用HibernateTemplate
对于Hiberante对数据库种数据删除操作的归纳
spring hibernatetemplate