颜超敏的电子商务博客
电子商务软件研发、Java开源技术和软件分析、设计经验分享
posts - 18,  comments - 36,  trackbacks - 0

Hibernate 深入研究之 Criteria

  By:  Faith.Yan

2006-07-22
MSN: Yanchaomin@hotmail.com
      

最近在项目中使用 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 进行详细说明。

      

1

 

       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 提供了那些类和方法来满足开发中查询条件的创建和组装,其结构层次如何。这样使用起来便可得心应手。



=================================
颜超敏
专注电子商务、工作流企业级Java软件系统研发;
个人博客:Craft6.cn 唯心六艺
=================================
posted on 2006-07-22 16:47 颜超敏 阅读(2001) 评论(3)  编辑  收藏 所属分类: Java开源技术

FeedBack:
# re: Hibernate 深入研究之Criteria
2006-07-23 12:00 | 胡子鱼
写得很好,要是再加点代码实例就更棒了!  回复  更多评论
  
# re: Hibernate 深入研究之Criteria
2006-07-23 15:47 | sqhe
请问 这些UML图是使用什么软件画的?  回复  更多评论
  
# re: Hibernate 深入研究之Criteria
2006-07-23 18:06 | Faith.Yan
网上或者是参考书籍的Criteria的实例比较多,我写本文是想从一个新的角度来写,不想重复。

这些UML图使用IBM的RSA来画的。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(3)

随笔分类(20)

随笔档案(17)

相册

友情链接

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜