我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hibernate中Criteria有什么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hibernate中Criteria有什么用

这篇文章主要介绍Hibernate中Criteria有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

现在对Hibernate Criteria 的用法进行总结:

Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name) 进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。

Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。

下面对 Hibernate Criterion 和 Projection 进行详细说明。

Hibernate Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。
Hibernate Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而 Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件(SimpleExpression 实例)。

除此之外, Restrictions 还提供了方法来创建 conjunction 和disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Object entity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些过滤条件:

Example exampleUser =Example.create(u)   .ignoreCase() // 忽略大小写   .enableLike(MatchMode.ANYWHERE);   // 对 String 类型的属性,无论在那里值在那里都匹配。相当于 %value%

Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Project 主要有SimpleProjection 、 ProjectionList 和 Property 三个实现。其中 SimpleProjection 和ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、min 、 sum 可以让开发者很容易对某个字段进行统计查询。Property 是对某个字段进行查询条件的设置,如通过Porperty.forName(“color”).in(new String[]{“black”,”red”,”write”}); 则可以创建一个 Project 实例。通过
criteria 的 add(Project) 方法加入到查询条件中去。使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装,下面介绍几种用法:

创建一个Criteria 实例
org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。

Criteria crit = sess.createCriteria(Cat.class);  crit.setMaxResults(50);  List cats = crit.list();

限制结果集内容
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。

org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。

List cats = sess.createCriteria(Cat.class)      .add( Restrictions.like("name", "Fritz%") )      .add( Restrictions.between("weight", minWeight, maxWeight) )      .list();

约束可以按逻辑分组。

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

Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许你直接使用SQL。

List cats = sess.createCriteria(Cat.class)      .add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%",    Hibernate.STRING) )      .list();

{alias}占位符应当被替换为被查询实体的列别名。
Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个Property。

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

结果集排序
你可以使用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();

关联
你可以使用createCriteria()非常容易的在互相关联的实体间建立约束。

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

注意第二个 createCriteria()返回一个新的 Criteria实例,该实例引用kittens 集合中的元素。
接下来,替换形态在某些情况下也是很有用的。

List cats = sess.createCriteria(Cat.class)      .createAlias("kittens", "kt")      .createAlias("mate", "mt")      .add( Restrictions.eqProperty("kt.name", "mt.name") )      .list();

(createAlias()并不创建一个新的 Criteria实例。)
Cat实例所保存的之前两次查询所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得符合条件的kittens, 你必须使用returnMaps()。

List cats = sess.createCriteria(Cat.class)      .createCriteria("kittens", "kt")      .add( Restrictions.eq("name", "F%") )      .returnMaps()      .list();  Iterator iter = cats.iterator();  while ( iter.hasNext() ) {      Map map = (Map) iter.next();      Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);      Cat kitten = (Cat) map.get("kt");  }

动态关联抓取
你可以使用setFetchMode()在运行时定义动态关联抓取的语义。

List cats = sess.createCriteria(Cat.class)      .add( Restrictions.like("name", "Fritz%") )      .setFetchMode("mate", FetchMode.EAGER)      .setFetchMode("kittens", FetchMode.EAGER)      .list();

这个查询可以通过外连接抓取mate和kittens。

6. 查询示例
org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。

org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。     Cat cat = new Cat();  cat.setSex('F');  cat.setColor(Color.BLACK);  List results = session.createCriteria(Cat.class)      .add( Example.create(cat) )      .list();

版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。
可以自行调整Example使之更实用。

   Example example = Example.create(cat)      .excludeZeroes()           //exclude zero valued properties      .excludeProperty("color")  //exclude the property named "color"      .ignoreCase()              //perform case insensitive string comparisons      .enableLike();             //use like for string comparisons  List results = session.createCriteria(Cat.class)      .add(example)      .list();

甚至可以使用examples在关联对象上放置条件。

List results = session.createCriteria(Cat.class)      .add( Example.create(cat) )      .createCriteria("mate")          .add( Example.create( cat.getMate() ) )      .list();

投影(Projections)、聚合(aggregation)和分组(grouping)
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();

以上是“Hibernate中Criteria有什么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hibernate中Criteria有什么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Hibernate中Criteria有什么用

这篇文章主要介绍Hibernate中Criteria有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!现在对Hibernate Criteria 的用法进行总结:Hibernate 设计了 CriteriaSpe
2023-06-17

java中Hibernate框架有什么用

本篇文章为大家展示了java中Hibernate框架有什么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2.
2023-06-14

Hibernate中query语句有什么用

这篇文章给大家分享的是有关Hibernate中query语句有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。今天要在sqlserver环境下做一个简单的增删改功能,要用到分页,开始直接用oracle数据库环
2023-06-17

Hibernate Session有什么用

这篇文章主要讲解了“Hibernate Session有什么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate Session有什么用”吧!Hibernate的基本特征是完成
2023-06-17

Hibernate saveOrUpdate有什么用

这篇文章主要介绍“Hibernate saveOrUpdate有什么用”,在日常操作中,相信很多人在Hibernate saveOrUpdate有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hiber
2023-06-17

Hibernate Formula有什么作用

这篇文章给大家分享的是有关Hibernate Formula有什么作用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.Hibernate Formula作用引用Hibernate annotations技术文档
2023-06-17

Hibernate里的Fetch有什么用

这篇文章主要为大家展示了“Hibernate里的Fetch有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hibernate里的Fetch有什么用”这篇文章吧。现在越来越发现其实掌握Hib
2023-06-17

Hibernate orm框架有什么用

本篇内容主要讲解“Hibernate orm框架有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate orm框架有什么用”吧!Hibernate在解决性能问题方面做得非常好。
2023-06-17

Hibernate中Session的作用是什么

这篇文章给大家介绍Hibernate中Session的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Hibernate中的Session是一级缓存,可以理解为进程级(是线程吧)的缓存,在进程(是线程吧)运行期
2023-05-30

Hibernate的作用是什么

这篇文章主要讲解了“Hibernate的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate的作用是什么”吧!一.Hibernate定义Hibernate是一种Java
2023-06-17

Hibernate中merge()方法的作用是什么

Hibernate中merge()方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体的实现过程如下:背景:◆Account 和 Group 两个对象,设置了双向
2023-06-17

Hibernate中各个包的作用是什么

这篇文章主要讲解了“Hibernate中各个包的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate中各个包的作用是什么”吧!下载Hibernate,例如2.0.3稳定
2023-06-03

java中Hibernate的原理是什么

这篇文章将为大家详细讲解有关java中Hibernate的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况
2023-06-14

spring中hibernate怎么使用

本篇内容主要讲解“spring中hibernate怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring中hibernate怎么使用”吧!  首先需要配置数据源,通常我们有两种方式获
2023-06-03

为什么用Spring来管理Hibernate

这篇文章将为大家详细讲解有关为什么用Spring来管理Hibernate,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要用Hibernate框架?既然用Hibernate框架访问管理持
2023-06-17

Hibernate中Sessin接口常用方法有哪些

这篇文章将为大家详细讲解有关Hibernate中Sessin接口常用方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Hibernate Sessin接口常用方法——updata()和merge()
2023-06-17

JPA使用criteria简单查询工具类的方式是什么

这篇文章将为大家详细讲解有关JPA使用criteria简单查询工具类的方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。以前用jpa写了一个条件筛选的查询数据如下,才知道那么渣渣,就是
2023-06-22

hibernate,jpa与spring data jpa之间有什么关系

小编给大家分享一下hibernate,jpa与spring data jpa之间有什么关系,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!文字说明HibernateHibernate是一个开放源代码的对象关系映射框架,它对J
2023-06-25

Hibernate在Java中的运行原理是什么

这篇文章将为大家详细讲解有关Hibernate在Java中的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是Hibernate? Hibernate,翻译过来是冬
2023-05-31

Hibernate中cascade和inverse怎么使用

这篇文章主要讲解了“Hibernate中cascade和inverse怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate中cascade和inverse怎么使用”吧!1
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录