`
igogogo9
  • 浏览: 250758 次
  • 性别: Icon_minigender_1
  • 来自: 海口市
社区版块
存档分类
最新评论

Hibernate 深入研究之 Criteria

阅读更多
最近在项目中使用 Spring Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。所以现在对 Hibernate Criteria 深入研究一下。《 Hibernate Reference 》及网上其它一些资料对 Criteria 已经做了很多介绍。本文主要是从 Criteria 的结构入手来进行分析。

       如图 1 Hibernate 设计了 CriteriaSpecification 作为 Criteria 的顶级接口,其下面提供了 Criteria DetachedCriteria

Criteria DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需 Session DetachedCriteria 提供了 4 个静态方法 forClass(Class) forEntityName(Name) 进行 DetachedCriteria 实例的创建。 Spring 的框架提供了

getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据

DetachedCriteria 来返回查询结果。

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

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

        <v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>

1

<o:p> </o:p>

       Criterion Criteria 的查询条件。

Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。图 2 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%

 
2

      

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) 方法加入到查询条件中去。

 
3

      

       使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装,其结构层次如何。这样使用起来便可得心应手。

分享到:
评论

相关推荐

    Hibernate深入研究之Criteria.rar

    《Hibernate深入研究之Criteria》 Hibernate作为Java领域中的一款强大持久化框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑,而非繁琐的SQL语句。本篇将重点探讨Hibernate中的Criteria API,这是...

    hibernate技术研究对比总结

    本文档的主要目的是为了深入理解 Hibernate 的工作原理、特性和最佳实践,以及与其他ORM框架的比较,为开发者提供决策依据。 1.2 **文档范围** 文档覆盖了 Hibernate 的核心概念,如对象关系映射、持久化模型、事务...

    Hibernate 多表连接分页查询示范项目

    **Hibernate 框架简介** Hibernate 是一个流行的 Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式操作数据库,将...通过深入研究这个项目,开发者可以更好地理解如何在 Java 应用中高效地处理多表数据。

    Hibernate 简单 PPT 总结

    深入QBC查询.md可能涵盖了Hibernate的Query By Criteria API,这是另一种查询数据库的方式,除了传统的HQL(Hibernate Query Language)外,开发者可以通过构建Criteria对象来执行动态查询,这种方式更接近面向对象...

    hibernate教程打包下载,史上最全的HIBERNATE

    这份史上最全的Hibernate教程,旨在帮助新手快速入门并掌握Hibernate的核心概念和使用技巧,同时也为有经验的开发者提供了深入研究的素材。通过系统学习,开发者不仅能提升数据库操作的效率,还能更好地理解和应用...

    Hibernate Quickly 源代码

    通过深入研究《Hibernate Quickly 源代码》,开发者可以全面掌握Hibernate框架的使用,提高开发效率,同时也能了解到实际项目中如何解决常见的持久化问题。这是一份非常有价值的资源,对于想要提升Java数据库编程...

    hibernate第一个hibernate

    学习完基础后,可深入研究Hibernate的高级特性,如 Criteria API、Hibernate Search 和 JPA 规范等。 总之,"hibernate第一个hibernate"项目是一个绝佳的起点,它将引导你了解并掌握Hibernate的基本概念和操作。...

    spring和hibernate源文件

    通过深入研究 Spring 和 Hibernate 的源代码,开发者不仅可以提高自己的技能,还能更好地定制和优化应用程序,解决实际问题。同时,这也有助于跟踪框架的最新发展,以便及时掌握新技术和最佳实践。

    Hibernate官方中文参考手册+Hibernate开发指南+Hibernate的两本英文书籍

    《Hibernate的两本英文书籍》可能指的是更深入的原版文档或者专业著作,这些书籍通常会包含最新的技术信息和最佳实践,对于想要深入研究Hibernate或者保持技术更新的开发者来说是不可或缺的资源。可能涵盖的主题包括...

    孙卫琴hibernate source code2

    最后,`chapter6`深入研究了Hibernate的缓存机制。Hibernate提供了第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存)。第一级缓存是默认开启的,每个Session都有一个独立的缓存,可以提高...

    Hibernate3.2.5.jar

    总的来说,"hibernate3.2.5.jar"文件是学习和开发使用Hibernate 3.2.5的重要资源,通过深入研究源码和示例程序,开发者可以更好地掌握ORM技术,提高Java应用的数据库处理效率。同时,了解这个版本的特性也能帮助理解...

    Hibernate源码

    在深入研究Hibernate源码时,可以关注以下关键点: - **实体管理**:了解实体生命周期(瞬态、持久化、托管和脱管),以及状态转换的过程。 - **HQL和Criteria API**:学习如何构建面向对象的查询,以及它们与原生...

    hibernate-distribution-3.6.2.Final-dist

    总之,`hibernate-distribution-3.6.2.Final-dist`源码包是学习和研究Hibernate的好资料,通过深入研究源代码,开发者不仅可以掌握ORM的基本原理,还能提升对Java和数据库设计的理解,为开发更高效、更稳定的应用...

    hibernate-3.5.6 源码

    这个资源是Hibernate 3.5.6版本的源码,对于理解ORM框架的内部工作原理、学习数据库交互以及深入研究Hibernate的实现机制非常有帮助。 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,它允许开发者用Java...

    hibernate3.jar及其源代码文件

    **标题与描述解析** ...通过深入研究hibernate3.jar的源代码,开发者可以更好地了解这些概念如何在实际中实现,以及如何根据自己的需求进行定制和优化。这对于提升Java EE应用的开发效率和质量大有裨益。

    hibernate_third项目源码

    通过深入研究这个`hibernate_third`项目,你可以亲身体验到Hibernate在实际开发中的强大功能,同时也能提升你在ORM领域的技能。这个项目提供了丰富的示例,帮助你从实践中掌握各种查询技术,是学习和提升Hibernate...

    传智播客hibernate源码

    **标题与描述解析** 标题"传智播客hibernate源码"暗示了这是一个关于Hibernate框架...通过研究这些文件,学习者可以深入了解Hibernate的工作原理,提升数据库操作的技能,并了解如何在实际项目中有效地使用Hibernate。

    Hibernate DOC中文文档(学习Hibernate必备手册)

    《Hibernate DOC中文文档》是学习Hibernate框架的重要参考资料,它详细...无论是想要快速入门,还是深入研究,这份文档都是一份不可多得的学习资料。只要你耐心研读,掌握Hibernate并运用到实际项目中将不再是难题。

    Hibernate Soruce Code 源代码

    通过深入研究Hibernate源代码,我们可以更好地掌握Java持久化技术,提高编程效率。 1. Hibernate ORM框架概述:Hibernate是一个强大的ORM框架,它将Java对象与数据库表进行映射,实现了对象的透明持久化。这使得...

    hibernate-src.zip

    深入研究`hibernate-src.zip`中的源码,可以让我们理解Hibernate如何通过反射、代理、动态字节码等技术实现对象的持久化,以及其内部是如何优化SQL语句、处理缓存、管理事务的。这对于提升我们的Java编程技能,尤其...

Global site tag (gtag.js) - Google Analytics