Criteria 的使用

1. Criteria   criteria=session.createCriteria(User.class);   

2.  ProjectionList   proList   =   Projections.projectionList();//设置投影集合   

3.   proList.add(Projections.groupProperty( "userName "));   

4.   proList.add(Projections.groupProperty( "password "));   

5.   criteria.setProjection(proList);   

6.      

/

//.add(Projections.property("buyerSex"))//设置查询哪一列

7.   最后返回的List是   Object[]   ,   [0]   =   userName,   [1]   =   password   

 

去重 cr.setProjection(Projections.distinct(Projections.property("thirdClass")));

 

如果想结合统计与分组功能,则可以使用ProjectionList,例如下面的程式会计算每个年龄各有多少个人:

ProjectionList projectionList = Projections.projectionList();

projectionList.add(Projections.groupProperty("age"));

projectionList.add(Projections.rowCount());

Criteria criteria = session.createCriteria(User.class);

criteria.setProjection(projectionList);

List users = criteria.list();

Iterator iterator = users.iterator();

while(iterator.hasNext()) {

    Object[] o = (Object[]) iterator.next();

    System.out.println(o[0] + "\t" +o[1]);

 

 

3. 结果集排序
  可以使用org.hibernate.criterion.Order来为查询结果排序。 
List cats = sess.createCriteria(Cat.class) 
.add(Restrictions.like("name", "F%") 
.addOrder(Order.asc("name") ) 
.addOrder(Order.desc("age") ) 
.setMaxResults(50) 
.list(); 
List cats =sess.createCriteria(Cat.class) 
.add(Property.forName("name").like("F%") ) 
.addOrder(Property.forName("name").asc() ) 
.addOrder(Property.forName("age").desc() ) 
.setMaxResults(50) 
.list();

 

7. 投影、聚合和分组
org.hibernate.criterion.Projections是 Projection的实例工厂。通过调用
setProjection()应用投影到一个查询。 
List results =session.createCriteria(Cat.class) 
.setProjection(Projections.rowCount() ) 
.add(Restrictions.eq("color", Color.BLACK) ) 
.list(); 
List results =session.createCriteria(Cat.class) 
.setProjection(Projections.projectionList() 
.add( Projections.rowCount()) 
.add(Projections.avg("weight") ) 
.add(Projections.max("weight") ) 
.add(Projections.groupProperty("color") ) 

.list(); 

List cats = sess.createCriteria(Cat.class) 
.add(Restrictions.like("name", "F%") 
.createCriteria("kittens") 
.add(Restrictions.like("name", "F%") 
.list(); 

 

alias 起别名

avg  一个属性的平均值

count  一个属性的count值

countDistincat  一个不重复的属性的count值

distinct   一个属性的唯一值

groupProperty  一个分组的属性

id   标识列的值

max   一个属性的最大值

min   一个属性的最小值

projectionList   创建一个映射集合

property   一个项目的映射值

rowcount  一个查询的行数

sqlGroupProjection

sum     一个属性的sum值

Projections.distinct(Projections.property("thirdClass"))去重

 

 

① avg(String propertyName):计算属性字段的平均值。

② count(String propertyName):统计一个属性在结果中出现的次数。

③ countDistinct(String propertyName):统计属性包含的不重复值的数量。

④ max(String propertyName):计算属性值的最大值。

⑤ min(String propertyName):计算属性值的最小值。

⑥ sum(String propertyName):计算属性值的总和。

(1)使用Projections的alias()方法为指定投影指定别名。一旦为projection指定了别名,则程序就可以根据该Projection别名来进行其他额外操作了,比如排序。条件查询片段如下:

 

List l =session.createCriteria(Enrolment.class)

 

          .setProjection(Projections.projectionList()

 

            //按course进行分组

 

          .add(Projections.groupProperty("course"))

 

           //统计记录条数,并为统计结果指定别名c

 

          .add(Projections.alias(Projections.rowCount()," c"))

 

             ).addOrder(Order,asc("c"))

 

           .list();

 

(2)使用SimpleProjection的as()方法为自身指定别名。

 

List l =session.createCriteria(Enrolment.class)

 

           .setProjection(Projections.projectionList()

 

            //按course进行分组

 

          .add(Projections.groupProperty("course").as("c"))

 

           //统计记录条数,并为统计结果指定别名c

 

           .add(Projections.rowCount())

 

             ).addOrder(Order,asc("c"))

 

           .list();

 

(3)使用ProjectionList的add()方法添加投影时指定别名。

 

ProjectionList的add()方法有两个重载形式,一个是直接添加投影,另一个是在添加投影时指定别名。条件查询片段如下:

 

List l =session.createCriteria(Enrolment.class)

 

          .setProjection(Projections.projectionList()

 

            //按course进行分组,指定别名为c

 

          .add(Projections.groupProperty("course"),("c"))

 

           //统计记录条数,并为统计结果指定别名rc

 

          .add(Projections.rowCount(),"rc")

 

             ).addOrder(Order,asc("c"))

 

           .list();

时间: 2024-11-03 12:52:09

Criteria 的使用的相关文章

nhibernate数据加载之Criteria加载

加载|数据 Criteria是通过一组条件表达式(Expression)来加载数据的,它返回满足条件的对象集合. 主要接口为ICriteria,实现为CriteriaImpl类,此类加有Internal修饰,因此不能在程序集外显示创建,nhibernate在session对象中为我们提供了一个方法CreateCriteria,此方法返回ICriteria接口. 这里列出了ICriteria接口的一些方法:SetMaxResults:设置返回的最大结果数,可用于分页:SetFirstResult:

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Example) 实例分析 结语 上一节,我们介绍了NHibernate查询语言的一种:NHibernate查询语言(HQL,NHibernate Query Language),这一节介绍一下条件查询(Criteria API). NHibernate中的查询方法 在NHibernate中提供了三种查

Hibernate中Criteria的完整用法

最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria . Criteria 和 DetachedCriteria 的主要区别在于创建的

hibernate3学习笔记(七) Criteria Queries

仍然接着前面的例子来讲:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/201101/23637.htm 示例代码如下: 1.package com.hb3.pack_01;2.3.import java.util.Iterator;4.import java.util.List;5. 6.import org.hibernate.Criteria;7.import org.hibernate.Hibernate;8.i

java-关于Criteria与SQL(HQL)

问题描述 关于Criteria与SQL(HQL) 大家好,我是刚刚入行的新人,我有个疑问,在hibernate中的criteria查询和sql或hql查询,各自有什么优势和缺点?就不用说criteria可以面向对象构建查询之类的了,我比较想知道在实际开发中,什么样的情况应该用哪种.不知道大家在开发中有没有遇到过,来简单聊聊讨论一下吧~ 解决方案 http://my.oschina.net/u/1450300/blog/280902 解决方案二: ------------Query接口 1.lis

Torque中criteria.addJoin方法使用的问题急!

问题描述 在addJoin方法中我想把AgentInstallInfoPeer.SCHEDULE_TEMPLATE换成NUMBER型但直接拼字符串的方法生成出来的上SQL文有问题,想请教一下大家一下!java代码目前状态:criteria.addJoin("TO_NUMBER("+AgentInstallInfoPeer.SCHEDULE_TEMPLATE+",'99999999')",TempletPeer.TEMPLET_ID,Criteria.LEFT_JOI

请教Hibernate的Criteria查询的一个小问题

问题描述 实体类:public class User implements Serializable{private static final long serialVersionUID = 120215L;private long id;private String name;private int age;private String role; get...略 set...略}查询方法public static List selectUser(User u,int first,int ma

Android使用criteria选择合适的地理位置服务实现方法_Android

本文实例讲述了Android使用criteria选择合适的地理位置服务实现方法.分享给大家供大家参考,具体如下: /* LocationActivity.java * @author octobershiner * 2011 7 24 * SE.HIT * 利用Criteria选择最优的位置服务,演示定位用户的位置并且监听位置变化的代码 * */ package uni.location; import android.app.Activity; import android.content.C

hibernate的多条件查询——Criteria Query的应用

  查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象.在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中.这样,程序员可以不使用SQL甚至HQL的情况下进

Hibernate的Criteria不能用于视图吗?

问题描述 我有两个Entity分别为a,b其中a在数据库中是一个视图,b是一张数据表@Entity//a.class如下@Table(name="View_LastStructPack")publicclassViewLastStructPackimplementsjava.io.Serializable{ ......//b.class如下@Entity@Table(name="p2008_user")@Searchable@XmlRootElementpubli