Hibernate 查询 Projections 类使用 (一)
来源:互联网 发布:caffe softmax层 编辑:程序博客网 时间:2024/06/05 23:00
Hibernate也支持属性、统计函数和Group By等查询。
(1)要想使用Hibernate的投影统计功能,首先要从org.hibernate.criterion.Projections工厂类获得org.hibernate.criterion.Projection对象。与Restrictions类相似,Projections类提供了几个用来获取Projection实例的静态工厂方法。在获得Projection对象之后,使用setProjection()方法将它添加到Criteria对象中。注意,返回的结果集是Object类型,需要对结果进行适当的类型转换。
Hibernate的Projections工厂类包含了以下几个常用的统计函数:
① avg(String propertyName):计算属性字段的平均值。
② count(String propertyName):统计一个属性在结果中出现的次数。
③ countDistinct(String propertyName):统计属性包含的不重复值的数量。
④ max(String propertyName):计算属性值的最大值。
⑤ min(String propertyName):计算属性值的最小值。
⑥ sum(String propertyName):计算属性值的总和。
下面的示例演示了一些统计函数和投影列表的使用方法:
- getSession().beginTransaction();
- Criteria Crit = getSession().createCriteria(Product.class);
- ProjectionList projList = Projections.projectionList();
- projList.add(Projections.max("price"));
- projList.add(Projections.min("price"));
- projList.add(Projections.avg("price"));
- projList.add(Projections.countDistinct("description"));
- Crit.setProjection(projList);
- List result = Crit.list();
- getSession().getTransaction().commit();
上述示例执行了多个统计投影。当执行多个统计投影时,会获取一个List,并且是一个Object类型的List,其中依次包含所有的统计投影结果。
(2)使用投影的一个好处就是,获得的结果是单独的属性而不是实体类。例如,一个产品表中包含有很多字段,我们想要获取产品表中的名称和描述,而不需要将完整的实体加载到内存中。
- Criteria Crit = getSession().createCriteria(Product.class);
- ProjectionList projList = Projections.projectionList();
- projList.add(Projections.property("name"));
- projList.add(Projections.property("description"));
- Crit.setProjection(projList);
- List result = Crit.list();
使用这种查询风格可以减少应用服务器和数据库服务器之间的网络通信量。但是,如果客户机的内存容量的确是有限的,那么这种查询方式可以避免处理大型数据集对内存的压力。如果不确定以后是否需要一个完整的结果集,这得要执行另外一次查询,反而降低了查询性能。所以只能在适当的时候才使用Hibernate的投影功能。
那么如何获得结果集中的不重复的结果呢?方法为:
distinct(Projection proj):统计属性的不重复值。
- getSession().beginTransaction();
- Criteria criteria = getSession().createCriteria(Transaction.class);
- ProjectionList proList = Projections.projectionList();
- proList.add(Projections.distinct(Projections.property("module")));
- criteria.setProjection(proList);
- criteria.addOrder(Order.asc("orderSign"));
- list = criteria.list();
- getSession().getTransaction().commit();
(3)可以使用groupProperty投影对结果集进行分组(使用SQL的GROUP BY子句)。下面的示例安装名称和价格对产品进行分组:
- Criteria Crit = getSession().createCriteria(Product.class);
- ProjectionList projList = Projections.projectionList();
- projList.add(Projections.groupProperty("name"));
- projList.add(Projections.groupProperty("price"));
- Crit.setProjection(projList);
- List result = Crit.list();
- Hibernate 查询 Projections 类使用 (一)
- Hibernate 查询 Projections 类使用
- org.hibernate.criterion.Projections投影(Projections)
- Hibernate使用Projections进行聚合操作
- Hibernate使用Projections进行聚合操作
- Hibernate使用Projections进行聚合操作
- Hibernate的查询 标准(Criteria--Projections)查询----- 聚合和分组
- Hibernate中使用Criteria接口的Projections类处理聚合结果
- hibernate的Projections用法
- Hibernate查询(一)
- Hibernate Projections(投影、统计、不重复结果)
- Hibernate Projections(投影、统计、不重复结果)
- Hibernate Projections(投影、统计、不重复结果)
- Hibernate Projections(投影、统计、不重复结果)
- Hibernate Projections(投影、统计、不重复结果)
- hibernate中Projections的方法
- hibernate中的查询(一)
- Spring Data JPA 一Projections
- 关于json拼接字符串的问题
- Java 中数组的冒泡排序 和 直接选择排序
- 程序员自我修练-提高写代码的能力
- 利用rsync同步备份文件
- 正则表达式语法
- Hibernate 查询 Projections 类使用 (一)
- flask中的secure_filename方法获取不到中文文件名
- [HDU1512]Monkey King(可并堆)
- WordPress中获取页面链接和标题的相关PHP函数用法解析
- The tslib functionality test failed问题解决方案
- java-类名.静态方法。类的构造没执行。
- 386. Lexicographical Numbers 难度:medium
- 散列
- netstat参数分析