`
ariyue
  • 浏览: 337624 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Hibernate 深入研究之 Criteria

    博客分类:
  • java
阅读更多
Hibernate 设计了 CriteriaSpecification 作为 Criteria 的顶级接口,其下面提供了 Criteria 和 DetachedCriteria 。

网管u家u.bitscn@com

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

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

网管有家bitscn.net

DetachedCriteria 来返回查询结果。 网管下载dl.bitscn.com

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

下面就对 Criterion 和 Projection 进行详细说明。
网管网www.bitscn.com

        网管有家www.bitscn.net

图 1 中国网管联盟bitsCN.com


网管u家u.bitscn@com

       Criterion 是 Criteria 的查询条件。 网管有家www.bitscn.net

Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。图 2 是 Criterion 的结构图。 Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而 Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。
网管有家bitscn.net

Criterion 的实例可以通过 Restrictions 工具类来创建, Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件

网管有家bitscn.net

( SimpleExpression 实例)。除此之外, Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。 网管有家www.bitscn.net

至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Object entity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些过滤条件: 网管u家u.bitscn@com

Example exampleUser =Example.create(u)

网管u家www.bitscn.net

.ignoreCase() // 忽略大小写

网管下载dl.bitscn.com

.enableLike(MatchMode.ANYWHERE); 网管论坛bbs_bitsCN_com

// 对 String 类型的属性,无论在那里值在那里都匹配。相当于 %value% 网管有家bitscn.net

中国网管论坛bbs.bitsCN.com


图 2

网管有家bitscn.net

       网管u家bitscn.net

Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Project 主要有 SimpleProjection 、 ProjectionList 和 Property 三个实现。其中 SimpleProjection 和 ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询。

网管u家u.bitsCN.com

       Property 是对某个字段进行查询条件的设置,如通过

网管下载dl.bitscn.com

      Porperty.forName(“color”).in(new String[]{“black”,”red”,”write”}); 则可以创建一个 Project 实例。通过 criteria 的 add(Project) 方法加入到查询条件中去。
网管u家u.bitscn@com

中国网管联盟bitsCN.com


图 3
网管网www_bitscn_com

       中国网管论坛bbs.bitsCN.com

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

相关推荐

Global site tag (gtag.js) - Google Analytics