Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。   
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样,
      1 ============================DetachedCriteria ============================
        DetachedCriteria 是离线的,创建时无需 Session,

   DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name) 进行DetachedCriteria 实例创建。
   Spring 的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。
2===================================Criteria==============================

   Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;
3======================Criteria 和 DetachedCriteria===============
    Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。
   下面对 Criterion 和 Projection 进行详细说明。 
一、Criterion:      
   Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来 添加查询条件。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%  
二、Projection:
  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 提供了那些类和方法来满足开发中查 询条件的创建和组装,下面介绍几种用法:
1. 创建一个Criteria 实例 org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list(); 

2. 限制结果集内容 一个单独的查询条件是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(); 

转载于:https://www.cnblogs.com/lovebaoqiang/archive/2012/12/18/2823017.html

Criteria和DetachedCriteria区别应用相关推荐

  1. Criteria 与 DetachedCriteria 的区别与使用

    Criteria 与 DetachedCriteria 的主要区别在于创建形式不一样,Criteria是在线创建, 故 是通过session创建: sess.createCriteria(Cat.cl ...

  2. 转:Hibernate中Criteria和DetachedCriteria的完整用法

    原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...

  3. Criteria和DetachedCriteria

    先看一个比较经典且易懂的例子: DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class, "b&qu ...

  4. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  5. Hibernate的DetachedCriteria使用(含Criteria)

    1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种,这里做简单的概念介绍,不详细进行展开. 1.1 HQL(Hibernate Qu ...

  6. Hibernate的DetachedCriteria使用(含Criteria)转载

    https://www.cnblogs.com/deng-cc/p/6428599.html 1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC ...

  7. 【hibernate criteria】hibernate中criteria的完整用法 转

    ---恢复内容开始--- 转自:http://www.360doc.com/content/090313/10/26262_2794855.html 1.Criteria Hibernate 设计了 ...

  8. hibernate中criteria的一些用法

    最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 ...

  9. Hibernate openSession() 和 getCurrentSession的区别 .

    getHiberanteTemplate .getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去.而采用Op ...

最新文章

  1. Nature子刊:改进宏基因组的分箱和组装的新方法
  2. 数据中台产品经理面试指南(二)
  3. python精要(65)-类(2)-构造函数
  4. 微软为.NET程序员带来了最优的跨平台开发体验-WSL
  5. Object.assign()解释整理
  6. 对CSS选择器的理解
  7. 工作中遇到的各种问题
  8. Spark集群无法停止的原因分析和解决
  9. Oracle基础--PL/SQL编程基本语法
  10. top20万_美国top20大学博士,回国进腾讯后感叹:月入6万憋屈,后悔回国了
  11. 案例|工业物联网解决方案•智慧水务云平台
  12. 微信小程序–二维码生成器
  13. Android设计之UI透明图标
  14. 计算机基础作业2答案,《计算机基础》作业答案 (2)
  15. TKK: 更新 TKK 失败,请检查网络连接,推荐其他
  16. 网络教育专升本统考计算机分值,网教统考科目计算机应用基础之文字处理部分如何提高分数?...
  17. pc豌豆荚怎么root,豌豆荚使用教程
  18. iOS客户端图片智能裁剪
  19. 在Linux系统中运行C语言程序
  20. 基于OpenGL的Koch分形雪花实现

热门文章

  1. python--列表list
  2. MySQL 查询部门人数大于2的员工信息
  3. 电商商城系统活动设计
  4. Visual Studio 11预览: 新的编程语言功能
  5. RabbitMq入门(七)消息处理(消息持久化autoDelete、消息确认ACK机制)
  6. 360云计算|2019年度精选文章
  7. Thanos 简介和实践
  8. SpringCloud(二) 生产者、消费者工程搭建与调用(上)
  9. spring整合hibernate出现HibernateException: Unable to get the default Bean Validation factory
  10. console.log 用法