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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Criteria Query

    Posted on 2007-08-08 23:00 semovy 閱讀(498) 評論(0)  編輯  收藏 所屬分類: Hibernate

    Criteria Query

    Criteria Query通過面向對象化的設計,將數(shù)據(jù)查詢條件封裝為一個對象。簡單來

    講,Criteria Query可以看作是傳統(tǒng)SQL的對象化表示,如:

    Criteria criteria = session.createCriteria(User.class);

    criteria.add(Expression.eq("name","Erica"));

    criteria.add(Expression.eq("sex",new Integer(1)));

    這里的criteria 實例實際上是SQL Select * from t_user where

    name=Ericaand sex=1的封裝(我們可以打開Hibernate show_sql 選項,

    以觀察Hibernate在運行期生成的SQL語句)。

    Hibernate 在運行期會根據(jù)Criteria 中指定的查詢條件(也就是上面代碼中通過

    criteria.add方法添加的查詢表達式)生成相應的SQL語句。

    這種方式的特點是比較符合Java 程序員的編碼習慣,并且具備清晰的可讀性。正因

    為此,不少ORM實現(xiàn)中都提供了類似的實現(xiàn)機制(如Apache OJB)。

    對于Hibernate的初學者,特別是對SQL了解有限的程序員而言,Criteria Query

    無疑是上手的極佳途徑,相對HQLCriteria Query提供了更易于理解的查詢手段,借

    IDECoding Assist機制,Criteria的使用幾乎不用太多的學習。

    Criteria 查詢表達式

    Criteria 本身只是一個查詢容器,具體的查詢條件需要通過Criteria.add

    方法添加到Criteria實例中。

    如前例所示,Expression 對象具體描述了查詢條件。針對SQL 語法,

    Expression提供了對應的查詢限定機制,包括:

    方法 描述

    Expression.eq 對應SQLfield = value”表達式。

    Expression.eq("name","Erica")

    Expression.allEq 參數(shù)為一個Map對象,其中包含了多個屬性-值對

    應關系。相當于多個Expression.eq關系的疊加。

    Expression.gt 對應SQL中的 “field > value ” 表達式

    Hibernate Developer’s Guide Version 1.0

    September 2, 2004 So many open source projects. Why not Open your Documents?

    Expression.ge 對應SQL中的 “field >= value” 表達式

    Expression.lt 對應SQL中的 “field < value” 表達式

    Expression.le 對應SQL中的 “field <= value” 表達式

    Expression.between 對應SQL中的 “between” 表達式

    如下面的表達式表示年齡(age)位于1350區(qū)

    間內。

    Expression.between("age",new

    Integer(13),new Integer(50));

    表達式

    Expression.in 對應SQL中的 ”field in …” 表達式

    Expression.eqProperty 用于比較兩個屬性之間的值,對應SQL中的“field

    = field”。

    如:

    Expression.eqProperty(

    "TUser.groupID",

    "TGroup.id"

    );

    Expression.gtProperty 用于比較兩個屬性之間的值,對應SQL中的“field

    > field”。

    Expression.geProperty 用于比較兩個屬性之間的值,對應SQL中的“field

    >= field”。

    Expression.ltProperty 用于比較兩個屬性之間的值,對應SQL中的“field

    < field”。

    Expression.leProperty 用于比較兩個屬性之間的值,對應SQL中的“field

    <= field”。

    Expression.and and關系組合。

    如:

    Expression.and(

    Expression.eq("name","Erica"),

    Expression.eq(

    "sex",

    new Integer(1)

    )

    );

    Expression.or or關系組合。

    如:

    Hibernate Developer’s Guide Version 1.0

    September 2, 2004 So many open source projects. Why not Open your Documents?

    Expression.or(

    Expression.eq("name","Erica"),

    Expression.eq("name","Emma")

    );

    Expression.sql 作為補充,本方法提供了原生SQL語法的支持。我

    們可以通過這個方法直接通過SQL語句限定查詢

    條件。

    下面的代碼返回所有名稱以“Erica”起始的記錄:

    Expression.sql(

    lower({alias}.name) like lower(?),

    "Erica%",

    Hibernate.STRING

    );

    其中的“{alias}”將由Hibernate在運行期使

    用當前關聯(lián)的POJO別名替換。

    注意Expression 各方法中的屬性名參數(shù)(如Express.eq中的第一個參數(shù)),這里

    所謂屬性名是POJO中對應實際庫表字段的屬性名(大小寫敏感),而非庫表中的實

    際字段名稱。

    Criteria 高級特性

    限定返回的記錄范圍

    通過criteria. setFirstResult/setMaxResults 方法可以限制一次查詢返回

    的記錄范圍:

    Criteria criteria = session.createCriteria(TUser.class);

    //限定查詢返回檢索結果中,從第一百條結果開始的20條記錄

    criteria.setFirstResult(100);

    criteria.setMaxResults(20);

    對查詢結果進行排序

    //查詢所有groupId=2的記錄

    //并分別按照姓名(順序)groupId(逆序)排序

    Criteria criteria = session.createCriteria(TUser.class);

    criteria.add(Expression.eq("groupId",new Integer(2)));

    criteria.addOrder(Order.asc("name"));

    Hibernate Developer’s Guide Version 1.0

    September 2, 2004 So many open source projects. Why not Open your Documents?

    criteria.addOrder(Order.desc("groupId"));

    Criteria作為一種對象化的查詢封裝模式,不過由于Hibernate在實現(xiàn)過程中將精力

    更加集中在HQL查詢語言上,因此Criteria的功能實現(xiàn)還沒做到盡善盡美(這點上,OJB

    Criteria 實現(xiàn)倒是值得借鑒),因此,在實際開發(fā)中,建議還是采用Hibernate

    方推薦的查詢封裝模式:HQL

    主站蜘蛛池模板: 亚洲精品无码久久久久久久 | 美女18毛片免费视频| 亚洲精品成人网久久久久久| 毛色毛片免费观看| 精品成人一区二区三区免费视频| 中文字幕不卡亚洲| 桃子视频在线观看高清免费完整| 亚洲色中文字幕无码AV| 亚洲爆乳大丰满无码专区| 亚洲中文字幕视频国产| 亚洲免费黄色网址| 乱爱性全过程免费视频| 亚洲最大成人网色| 亚洲第一区在线观看| 51精品视频免费国产专区| 水蜜桃视频在线观看免费| 亚洲午夜久久久精品影院| 四虎在线播放免费永久视频| 无码精品国产一区二区三区免费| 亚洲国产成人精品无码区花野真一| a级亚洲片精品久久久久久久| av免费不卡国产观看| 亚洲日本久久一区二区va| 国产成人毛片亚洲精品| 日韩吃奶摸下AA片免费观看 | 免费高清小黄站在线观看| 国产三级在线免费| 美女被羞羞网站免费下载| 亚洲国产精品成人| 久久久高清免费视频 | 日批日出水久久亚洲精品tv| 中文字幕免费在线观看| 九一在线完整视频免费观看| 亚洲国产乱码最新视频| 亚洲人成网站影音先锋播放| 中文字幕无码精品亚洲资源网| 成年人免费视频观看| 精品国产污污免费网站aⅴ| 人妻在线日韩免费视频| 黄色免费在线网址| 亚洲av成人一区二区三区观看在线 |