前面发了Hibernate的查询 标准(Criteria)查询 分页、单个记录、排序 后有网友回复说道查询数据总数量,我今天补充一下标准查询中的 聚合与分组
记录数查询很简单:
Criteria crit = session.createCriteria(User.class); crit.setProjection(Projections.rowCount()); int v = (Integer)crit.uniqueResult();
但是要注意,setProjection方法只是最后一次有效。就是说你可以多次使用这个方法,但是后一次操作将覆盖前一次的聚合操作。
Criteria crit = session.createCriteria(User.class); crit.setProjection(Projections.rowCount()); int value = (Integer)crit.uniqueResult(); System.out.println(value); crit.setProjection(Projections.max("id")); value = (Integer)crit.uniqueResult(); System.out.println(value); crit.setProjection(Projections.sum("id")); value = (Integer)crit.uniqueResult(); System.out.println(value);
以上就会执行三次查询操作,分别执行的SQL为:
select count(*) from user select max(id) from user select sum(id) from user
如果要设置多个聚合操作,请查看如下示例:
ProjectionList proList = Projections.projectionList(); proList.add(Projections.rowCount()); proList.add(Projections.max("id")); proList.add(Projections.sum("id")); crit.setProjection(proList); List results = crit.list(); Object[] arr = (Object[])results.get(0); for(Object ob : arr){ System.out.println(ob.toString()); }
上面执行一条SQL:
select count(*),max(id),sum(id) from user
如果你看Projections这个类的话也也有看到分组的方法:
Criteria crit = session.createCriteria(User.class); crit.setProjection(Projections.rowCount()); crit.setProjection(Projections.groupProperty("name")); List results = crit.list(); Object[] arr = null; for(int i=0;i<results.size();i++){ arr = (Object[])results.get(i); for(Object ob : arr){ System.out.print(ob.toString()); } System.out.println(); }
以上会执行SQL:
select count(*) from user group by name
当然还有求平均,你可以自己尝试!
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
相关推荐
### Hibernate Criteria 分组、排序与关联查询详解 #### 标题与描述理解 - **标题**:“hibernate criteria 分组 排序 关联”这一标题明确了本文将围绕Hibernate Criteria API进行分组、排序以及关联查询的具体...
理解并熟练运用Hibernate的Criteria API,可以帮助开发者更有效地构建动态和复杂的查询,同时保持代码的整洁和可读性。在实际项目中,可以根据需求选择使用HQL(Hibernate Query Language)或Criteria API,两者各有...
4. **分组和聚合**: ```java criteria.setProjection(Projections.groupProperty("country")); criteria.setProjection(Projections.count("id")); ``` 5. **执行查询并获取结果**: ```java List<User> ...
Criteria API也支持分组和聚合操作。通过调用setGroupBy()方法进行分组,使用Projections类的聚合函数,如count(), max(), min()等。 6. **关联查询(Joins)** Hibernate Criteria API允许进行关联查询,包括内...
在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,Hibernate提供的聚合函数使得在Java应用程序中进行数据...
总结来说,Hibernate的Criteria API为Java开发人员提供了一种强大的、灵活的查询机制,使得我们可以以面向对象的方式来构建和执行SQL查询,极大地提升了代码的可读性和可维护性。结合源码理解和版本控制工具,可以...
通过上述介绍,我们可以看到,Hibernate的Criteria API提供了一个强大且灵活的数据查询解决方案,它不仅支持基本的查询需求,还能处理复杂的查询场景,如排序、分页、聚合函数、分组统计以及条件过滤等。这使得开发...
Criteria查询是Hibernate提供的API,与传统的HQL(Hibernate Query Language)查询相比,它更具有动态性和灵活性。Criteria查询允许你在运行时构建查询,这在处理动态或复杂的查询需求时尤其有用。下面我们将深入...
在Hibernate中,查询数据主要通过Criteria、HQL(Hibernate Query Language)和Query API三种方式。首先,让我们来看看Criteria查询。Criteria API提供了一种类型安全的方式,通过构建查询条件来执行数据库查询。...
在Java的持久层框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来替代传统的SQL或HQL(Hibernate Query Language)查询,以实现更加面向对象的数据库交互。Criteria API的设计旨在屏蔽不同数据库之间...
在Java的持久化框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来构建动态和复杂的查询。Criteria API的主要优点在于它的灵活性,允许开发者在运行时构建查询,而不必预先定义HQL(Hibernate Query ...
本资料主要探讨的是Hibernate中的两种查询方式:HQL(Hibernate Query Language)和Criteria API。 HQL,全称为Hibernate查询语言,是Hibernate提供的一种面向对象的查询语言,类似于SQL,但更加面向对象。HQL直接...
4. **分组(Projections)**:定义查询结果的返回字段,可以是单个属性、计算字段或者聚合函数。例如,统计不同城市的用户数量: ```java criteria.setProjection(Projections.groupProperty("city")); criteria....
本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query Language)以及Criteria API,帮助开发者更高效地处理数据库交互。 1. **基本查询(Criteria API)** Hibernate Criteria ...
总的来说,Hibernate Criteria API 提供了强大的查询功能,允许开发者以面向对象的方式构建复杂查询,同时保持代码的清晰和简洁。结合其分页、排序、预测、聚合等功能,可以灵活应对各种数据库查询需求。在实际开发...
Criteria API 可以添加分组和聚合函数,如 `Projections.groupProperty("propertyName")` 和 `Projections.sum("property")`。 ```java criteria.setProjection(Projections.projectionList() .add(Projections....