分组与统计
来源:互联网 发布:mysql 默认端口号 编辑:程序博客网 时间:2024/05/21 10:55
分组与统计:
在Hibernate3中,对Criteria又增添了新功能,可以支持分组与统计功能,在Hibernate3中增加了Projections以及ProjectionList类,这两个类对分组与统计功能进行了封装,如下代码:
Criteria criteria=session.createCriteria(User.class);
criteria.setProjection(Projections.groupProperty(“age”));(1)
List list=criteria.list();
Iterator it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
通过(1)处的代码,我们通过Projections类指定了用于分组的目标属性,当进行检索时Hibernate会生成类似如下的SQL语句:
Select age from user group by age;
还可以通过使用Projections的avg()/rowCount()/count()/max()/min()/countDistinct()等方法来实现统计功能,如下面的代码示例:
Criteria criteria=session.createCriteria(User.class);
criteria.setProjection(Projections.avg(“age”));(1)
List list=criteria.list();
Iterator it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
通过(1)处的代码,我们实现了对用户平均年龄的统计,当进行检索时,Hibernate会生成类似如下的SQL语句:
Select avg(age) from user;
另外,在SQL语句中的多条件分组与统计功能,可以利用ProjectionList类来实现,如下面代码所示:
Criteria criteria=session.createCriteria(User.class);
ProjectionList prolist=Projections.projectionList();
prolist.add(Projections.groupProperty(“age”));
prolist.add(Projections.rowCount());
criteria.setProjection(prolist);
List list=criteria.list();
通过以上代码,实现了对不同年龄人员数量的分组统计,当进行检索时,Hibernate会生成类似如下的SQL语句:
Select age,count(*) from user group by age;
5、DetachedCriteria:
在Hibernate2中,Criteria实例是与创建它的Session实例具有相同的生命周期的,也就是说,Session实例是它所创建的Criteria实例的宿主,当Session关闭时,寄生于Session实例的Criteria都将失效。这就对Criteria的重用造成了困难,为了实现Criteria实例的重用,在Hibernate3中提供了一个DetachedCriteria类,DetachedCriteria实例的生命周期与Session实例的生命周期无关,我们可以利用DetachedCriteria对一些常用的Criteria查询条件进行抽离,当需要进行检索时再与Session实例关联,从而获得运行期的Criteria实例。如下面的代码所示:
DetachedCriteria dc= DetachedCriteria.forClass(User.class);
dc.add(Expression.eq(“name”,”zhaoxin”));
dc.add(Expression.eq(“sex”,”1”));
Criteria criteria=dc.getExecutableCriteria(session);
Iterator it=criteria.list().iterator();
while(it.hasNext()){
User user=(User)it.next();
System.out.println(user.getName());
}
正如我们所见,DetachedCriteria的生存周期与session实例无关,当需要进行检索时,通过getExecutableCriteria(session)方法,与当前的Session实例关联并获得运行期的Criteria实例,完成检索。
DetachedCriteria也可以用于完成子查询功能,如下代码所示:
DetachedCriteria dc= DetachedCriteria.forClass(User.class);
dc.setProjection(Projections.avg(“age”));
Criteria criteria=session.createCriteria(User.class);
criteria.add(Subqueries.propertyGt(“age”,dc));
List list=criteria.list();
通过Subqueries类,实现了添加子查询的功能,我们将DetachedCriteria所设定的查询条件,当作子查询添加到了运行时Criteria实例的查询条件中,当执行检索时Hibernate会生成类似如下的SQL语句:
Select * from user where age>(select avg(age) from user group by age);
- 分组与统计
- IReport添加报表分组与分组统计
- IReport报表分组与分组统计
- 第六章 统计与分组
- c# datatable 分组与统计
- 统计函数与分组查询
- 分组统计
- 分组统计
- 分组统计
- 分组统计
- 分组统计
- 分组统计
- linq 分组与统计 , not in/in功能
- sql的分组统计与group by 日期的处理
- oracle基本命令集合(3)--分组与统计
- mysq 分组统计 avg分组统计
- 关于分组统计
- sql分组统计语句
- DataTable,DataView,DataRowView等之间的关系
- CSDN蒋涛:移动互联网盈利需转向“四化”
- 雷军:小米做Pad没难度 不做因Android市场欠佳
- 俄罗斯搜索引擎Yandex称将在海外挑战谷歌
- opencv 利用类haar小波特征的人脸、人眼等特征检测(带代码)
- 分组与统计
- 亚洲最大苹果店北京开业 粉丝连夜排队
- nkpc1 Lucy的难题
- 历史上睡幼女时间最长的皇帝
- 苹果iTV将改变什么?
- 队列_静态循环队列
- Qt制作的动态颜色渐变表盘
- 用keytool生成证书过程
- Android开机启动动画