Hibernate 查询 Projections 类使用
来源:互联网 发布:为什么选择软件测试 编辑:程序博客网 时间:2024/05/29 16:33
Hibernate 查询 Projections 类使用
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 类使用 (一)
- Hibernate使用Projections进行聚合操作
- Hibernate使用Projections进行聚合操作
- Hibernate使用Projections进行聚合操作
- Hibernate的查询 标准(Criteria--Projections)查询----- 聚合和分组
- Hibernate中使用Criteria接口的Projections类处理聚合结果
- org.hibernate.criterion.Projections投影(Projections)
- hibernate的Projections用法
- hibernate中Projections的方法
- Castle 中ActiveRecord查询部分字段属性的投影(Projections)使用教程
- Projections常用的聚合查询方法介绍
- hibernate使用sql查询
- hibernate 使用 sql 查询
- hibernate使用hql 查询
- Hibernate条件查询使用
- Hibernate离线查询使用
- hibernate使用sql查询
- 基于JDBC 的数据库返回数据Resultset 数据绑定到Javabean
- 第八周 输出星号 1
- 75个中文编程开发类网站合集
- asp.net 微信开发入门级Token验证
- Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 完美解决(tomcat error)
- Hibernate 查询 Projections 类使用
- linux图形框架DRI
- 解决ubuntu创建热点手机无法识别
- 语音群呼系统给企业带来实际上的价值
- 06上机练习2
- 10.18 T1
- (C++)二叉树的建立与递归方式遍历
- C# DES加密字符串
- split()函数的用法