顏超敏的電子商務(wù)博客
          電子商務(wù)軟件研發(fā)、Java開源技術(shù)和軟件分析、設(shè)計(jì)經(jīng)驗(yàn)分享
          posts - 18,  comments - 36,  trackbacks - 0

          Hibernate 深入研究之 Criteria

          ? By: ?Faith.Yan

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

          最近在項(xiàng)目中使用 Spring Hibernate 進(jìn)行開發(fā),有感于 Criteria 比較好用,在查詢方法設(shè)計(jì)上可以靈活的根據(jù) Criteria 的特點(diǎn)來方便地進(jìn)行查詢條件的組裝。所以現(xiàn)在對(duì) Hibernate Criteria 深入研究一下。《 Hibernate Reference 》及網(wǎng)上其它一些資料對(duì) Criteria 已經(jīng)做了很多介紹。本文主要是從 Criteria 的結(jié)構(gòu)入手來進(jìn)行分析。

          ?????? 如圖 1 Hibernate 設(shè)計(jì)了 CriteriaSpecification 作為 Criteria 的頂級(jí)接口,其下面提供了 Criteria DetachedCriteria

          Criteria DetachedCriteria 的主要區(qū)別在于創(chuàng)建的形式不一樣, Criteria 是在線的,所以它是由 Hibernate Session 進(jìn)行創(chuàng)建的;而 DetachedCriteria 是離線的,創(chuàng)建時(shí)無需 Session DetachedCriteria 提供了 4 個(gè)靜態(tài)方法 forClass(Class) forEntityName(Name) 進(jìn)行 DetachedCriteria 實(shí)例的創(chuàng)建。 Spring 的框架提供了

          getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根據(jù)

          DetachedCriteria 來返回查詢結(jié)果。

          如圖 1 Criteria DetachedCriteria 均可使用 Criterion Projection 設(shè)置查詢條件。可以設(shè)置 FetchMode( 聯(lián)合查詢抓取的模式 ) ,設(shè)置排序方式。對(duì)于 Criteria 還可以設(shè)置 FlushModel (沖刷 Session 的方式)和 LockMode (數(shù)據(jù)庫(kù)鎖模式)。

          下面就對(duì) Criterion Projection 進(jìn)行詳細(xì)說明。

          ??????

          1

          ?

          ?????? Criterion Criteria 的查詢條件。

          Criteria 提供了 add(Criterion criterion) 方法來添加查詢條件。圖 2 Criterion 的結(jié)構(gòu)圖。 Criterion 接口的主要實(shí)現(xiàn)包括: Example Junction SimpleExpression 。而 Junction 的實(shí)際使用是它的兩個(gè)子類 conjunction disjunction ,分別是使用 AND OR 操作符進(jìn)行來聯(lián)結(jié)查詢條件集合。

          Criterion 的實(shí)例可以通過 Restrictions 工具類來創(chuàng)建, Restrictions 提供了大量的靜態(tài)方法,如 eq (等于)、 ge (大于等于)、 between 等來方法的創(chuàng)建 Criterion 查詢條件

          SimpleExpression 實(shí)例)。除此之外, Restrictions 還提供了方法來創(chuàng)建 conjunction disjunction 實(shí)例,通過往該實(shí)例的 add(Criteria) 方法來增加查詢條件形成一個(gè)查詢條件集合。

          至于 Example 的創(chuàng)建有所不同, Example 本身提供了一個(gè)靜態(tài)方法 create(Object entity) ,即根據(jù)一個(gè)對(duì)象(實(shí)際使用中一般是映射到數(shù)據(jù)庫(kù)的對(duì)象)來創(chuàng)建。然后可以設(shè)置一些過濾條件:

          Example exampleUser =Example.create(u)

          .ignoreCase() // 忽略大小寫

          .enableLike(MatchMode.ANYWHERE);

          // 對(duì) String 類型的屬性,無論在那里值在那里都匹配。相當(dāng)于 %value%


          2

          ??????

          Project 主要是讓 Criteria 能夠進(jìn)行報(bào)表查詢,并可以實(shí)現(xiàn)分組。 Project 主要有 SimpleProjection ProjectionList Property 三個(gè)實(shí)現(xiàn)。其中 SimpleProjection ProjectionList 的實(shí)例化是由內(nèi)建的 Projections 來完成,如提供的 avg count max min sum 可以讓開發(fā)者很容易對(duì)某個(gè)字段進(jìn)行統(tǒng)計(jì)查詢。

          ?????? Property 是對(duì)某個(gè)字段進(jìn)行查詢條件的設(shè)置,如通過

          ????? Porperty.forName(“color”).in(new String[]{“black”,”red”,”write”}); 則可以創(chuàng)建一個(gè) Project 實(shí)例。通過 criteria add(Project) 方法加入到查詢條件中去。


          3

          ??????

          ?????? 使用 Criteria 進(jìn)行查詢,主要要清晰的是 Hibernate 提供了那些類和方法來滿足開發(fā)中查詢條件的創(chuàng)建和組裝,其結(jié)構(gòu)層次如何。這樣使用起來便可得心應(yīng)手。



          =================================
          顏超敏
          專注電子商務(wù)、工作流企業(yè)級(jí)Java軟件系統(tǒng)研發(fā);
          個(gè)人博客:Craft6.cn 唯心六藝
          =================================
          posted on 2006-07-22 16:47 顏超敏 閱讀(2017) 評(píng)論(3)  編輯  收藏 所屬分類: Java開源技術(shù)

          FeedBack:
          # re: Hibernate 深入研究之Criteria
          2006-07-23 12:00 | 胡子魚
          寫得很好,要是再加點(diǎn)代碼實(shí)例就更棒了!  回復(fù)  更多評(píng)論
            
          # re: Hibernate 深入研究之Criteria
          2006-07-23 15:47 | sqhe
          請(qǐng)問 這些UML圖是使用什么軟件畫的?  回復(fù)  更多評(píng)論
            
          # re: Hibernate 深入研究之Criteria
          2006-07-23 18:06 | Faith.Yan
          網(wǎng)上或者是參考書籍的Criteria的實(shí)例比較多,我寫本文是想從一個(gè)新的角度來寫,不想重復(fù)。

          這些UML圖使用IBM的RSA來畫的。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

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

          常用鏈接

          留言簿(3)

          隨筆分類(20)

          隨筆檔案(17)

          相冊(cè)

          友情鏈接

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 基隆市| 建宁县| 武强县| 石台县| 晋中市| 沙湾县| 高阳县| 崇仁县| 白城市| 大港区| 分宜县| 定襄县| 枞阳县| 万载县| 名山县| 临夏市| 香格里拉县| 会泽县| 象州县| 兴山县| 新安县| 阿巴嘎旗| 延庆县| 江陵县| 高台县| 武鸣县| 唐山市| 缙云县| 雅安市| 伊宁市| 陵水| 宿州市| 宁陵县| 南丹县| 三穗县| 剑河县| 威远县| 泸水县| 伊吾县| 布尔津县| 孝义市|