Hibernate 深入研究之 Criteria

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 提供了那些类和方法来满足开发中查询条件的创建和组装,其结构层次如何。这样使用起来便可得心应手。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值