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是已实现的基础的查询方式,一般用这个得多。

Criteria的用法详解相关推荐

  1. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  2. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  5. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  6. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

  7. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  8. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  9. WinDbg用法详解

    WinDbg用法详解 对WinDbg的方方面面作了详细的讲解. 转载于:https://blog.51cto.com/laokaddk/125111

最新文章

  1. 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)
  2. 欧盟调查或拖累进程 高通收购NXP一波三折
  3. 案例 | 河小象:智办事高效驱动组织升级
  4. 阿里云E-HPC联合安世亚太、联科集团共建云超算生态
  5. ES transport client使用
  6. 编程方法学13:字符串处理
  7. 那份让我想死的化工原理补考试卷
  8. 非标自动化转行机器人_机器人与非标自动化这两个有什么区别?可以从结构,功能等方面谈谈吗?...
  9. 在虚拟机上装win2003 server心得体会
  10. 2021牛客暑期多校训练营4 E-Tree Xor(异或+思维+区间交 or Trie树)
  11. 印度评论九章量子计算机,张礼立:中国 “九章”量子计算机到底厉害在哪?...
  12. html与java接口,JavaWeb学习——Servlet相关的接口和类
  13. Python编辑工具的全新版本,PyCharm 2020.1 稳定版发布
  14. android 距离设置多少dp核实,【Android学习】android布局中几个距离单位的区别:px、dp、sp...
  15. Linux操作系统使用基础02:Linux系统安装与登陆
  16. 如何向 Linux Kernel 提交 Patch
  17. nat123内网穿透
  18. 学术论文的定义、特点、写作方法以及写作格式
  19. Flash:Flash动画设计案例集合(广告条制作/遮罩动画/扫光动画/书法手写遮罩动画)图文教程之详细攻略
  20. Latex图表设置中英文双标题(非ccaption宏包)

热门文章

  1. 快手小哥风雨求职路之简历篇
  2. 关于SEO的研究和SPA 项目得SEO优化(科普篇)
  3. squeeze()和unsqueeze()
  4. 任务系统 java_当前主流网络游戏任务系统形式研究(转)
  5. 经纬财富:菏泽黄金投资如何止损
  6. SOHO如何给产品定价?如何报价?
  7. CTF【每日一题20160613】
  8. ESXi 直通网卡重启后依然提示“已启用/需要重新引导”的解决方法
  9. 全国各省电信及网通DNS列表
  10. Nginx 服务详解