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();

在MongoDB中,可以使用Criteria来构建查询条件。首先,创建一个Criteria对象,如引用\[1\]所示。然后,可以使用orOperator方法将多个Criteria对象组合起来,形成一个或逻辑条件。例如,可以使用stream和toArray方法将一个Criteria列表转换为Criteria数组,并将其传递给orOperator方法。最后,将Criteria对象添加到查询中,如query.addCriteria(criteria)所示。这样就可以使用Criteria来构建复杂的查询条件。\[1\] 如果需要在MongoDB中读取指定数量的数据记录,可以使用limit()方法。该方法接受一个数字参数,指定从MongoDB中读取的记录条数。例如,可以使用db.COLLECTION_NAME.find().limit(NUMBER)来限制读取的记录数量。\[2\] 此外,MongoDB还提供了$or关键字来实现or条件语句。可以使用$or关键字将多个条件组合在一起。语法格式如下:db.COLLECTION_NAME.find({$or:\[{key1 : value1}, {key2 : value2}\]}).pretty()。其中,key1和value1表示第一个条件,key2和value2表示第二个条件。这样就可以使用$or关键字进行或逻辑查询。\[3\] #### 引用[.reference_title] - *1* [【MongoDB】常用操作记录](https://blog.csdn.net/xmzmqx/article/details/108236682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MongoDB入门学习](https://blog.csdn.net/lmchhh/article/details/124480206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值