Criteria的用法详解

Criteria
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。
构建Criteria查询
Criteria 这个接口代表对一个特定的持久化类的查询,Session是用来创建Criteria实例的工厂:
创建方法:Criteria criteria = session.createCriteria(Mytest.class);

Criteria对SQL进行封装,让开发人员可以用对象的方式对数据库进行操作。
查询User的所有字段

Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
Iterator iterator = users.iterator();
while(iterator.hasNext()){
User user = (User)iterator.next();
System.out.println(user.getId() +" \t " + user.getName() +"/" + user.getAge());
}
Criteria是个容器,如果想要设定查询条件,则要使用add()方法加入Restrictions的条件限制。
如下,查询age大于20且小于40的的数据

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt(“age”,new Integer(20)));
criteria.add(Restrictions.it(“age”,new Integer(40)));
List users = criteria.list();
1
2
3
4
使用逻辑组合来进行查询
age等于(eq)20或者(or)age为空(isNull)

`Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(Restrictions.eq(“age”,new Integer(20)),Restrictions.inNull(“age”)));
List users = criteria.list();
限定查询数量 分页查询
Criteria的setMaxResults()方法可以限定查询回来的数据量,如果配合setFirstResult()设定传回查询结果起始数据的位置,就可以实现简单的分页,例如传回第51条之后的50条数据(如果有的话):

Criteria criteria = session.createCriteria(User.class);
    criteria.setFirstResult(51);
    criteria.setMaxResults(50);
    List users = criteria.list();
使用Property来进行查询
Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个使用add()方法加入条件时,预设是使用and来组合条件

Property age = Property.forName(“age”);
    List cats = sess.createCriteria(Cat.class)
      .add( Restrictions.disjunction()
      .add( age.isNull() )
      .add( age.eq( new Integer(0) ) )
      .add( age.eq( new Integer(1) ) )
      .add( age.eq( new Integer(2) ) ) )
      .add( Property.forName(“name”).in( new String[] { “Fritz”, “Izi”, “Pk” } ) )
      .list();

Restrictions常用限定查询方法
    Restrictions.eq –> equal,等于.

Restrictions.allEq –> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq 的效果

Restrictions.gt –> great-than > 大于

Restrictions.ge –> great-equal >= 大于等于

Restrictions.lt –> less-than, < 小于

Restrictions.le –> less-equal <= 小于等于

Restrictions.between –> 对应SQL的between子句
    
    Restrictions.like –> 对应SQL的LIKE子句

Restrictions.in –> 对应SQL的in子句

Restrictions.and –> and 关系

Restrictions.or –> or 关系

Restrictions.isNull –> 判断属性是否为空,为空则返回true 相当于SQL的 is null

Restrictions.isNotNull –> 与isNull相反 相当于SQL的 is not null

Restrictions.sqlRestriction –> SQL限定的查询

Order.asc –> 根据传入的字段进行升序排序

Order.desc –> 根据传入的字段进行降序排序

hibernate中Expression和Restrictions的用法有什么区别
Expression是底层的,能够支持嵌套查询。
Restrictions是已实现的基础的查询方式,一般用这个得多。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值