<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    konhon

    忘掉過去,展望未來。找回自我,超越自我。
    逃避不一定躲的過, 面對(duì)不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因?yàn)槟硞€(gè)理由而傷心難過, 但我卻能找個(gè)理由讓自己快樂.

    Google

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
    最近在項(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è)置查詢條件??梢栽O(shè)置 FetchMode( 聯(lián)合查詢抓取的模式 ) ,設(shè)置排序方式。對(duì)于 Criteria 還可以設(shè)置 FlushModel (沖刷 Session 的方式)和 LockMode (數(shù)據(jù)庫鎖模式)。

    下面就對(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ù)庫的對(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)手。

    posted on 2006-12-17 03:18 konhon 優(yōu)華 閱讀(1532) 評(píng)論(1)  編輯  收藏

    Feedback

    # re: Hibernate 深入研究之 Criteria 2006-12-17 04:40 中東
    看了你寫的文章,覺得比較深入,想問一下,做表報(bào)表在hql、Criteria 以sql之間做選擇,(報(bào)表的功能較多,權(quán)限什么都有),那一個(gè)會(huì)更好一些,理由?  回復(fù)  更多評(píng)論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 97无码人妻福利免费公开在线视频 | 国产精品免费久久久久久久久 | 69视频在线观看免费| 国产精品亚洲一区二区三区久久| 久久青青草原亚洲av无码app| 亚洲人成影院在线观看| 日韩精品无码人妻免费视频 | 亚洲综合网美国十次| 亚洲中文字幕无码爆乳AV| 国产无遮挡裸体免费视频| 四虎永久在线观看免费网站网址 | 亚洲精品无码99在线观看 | 亚洲色偷偷综合亚洲av78| 91亚洲va在线天线va天堂va国产| 国产精品亚洲二区在线观看 | 美女扒开尿口给男人爽免费视频 | 午夜成人免费视频| 成人免费观看一区二区| 99ee6热久久免费精品6| 免费人成在线观看视频高潮| 精品97国产免费人成视频| 一区二区三区免费在线观看| 国产偷国产偷亚洲高清人| 亚洲av中文无码乱人伦在线观看 | 国产h肉在线视频免费观看| 一区二区三区无码视频免费福利| 真正全免费视频a毛片| 国产成人亚洲合集青青草原精品| 亚洲国产精品碰碰| 国产免费无码AV片在线观看不卡| 亚洲国产福利精品一区二区| 亚洲AV无码日韩AV无码导航 | 久久夜色精品国产噜噜亚洲a| 亚洲人成网站影音先锋播放| 亚洲综合伊人久久大杳蕉| 亚洲AⅤ优女AV综合久久久| 国产免费人视频在线观看免费| 搡女人免费视频大全| 久久精品无码专区免费青青| 久草免费福利资源站| 无码成A毛片免费|