乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Hibernate之數(shù)據(jù)檢索

       shaobin0604@163.com 2006-09-06

      Hibernate之數(shù)據(jù)檢索- -

                                            

      數(shù)據(jù)檢索
      數(shù)據(jù)查詢與檢索是Hibernate中的一個亮點。相對其他ORM實現(xiàn)而言,Hibernate提供了靈活多樣的查詢機制。其中包括:
      1. Criteria Query
      2. Hibernate Query Language (HQL)
      3. SQL
      Criteria Query
      Criteria Query通過面向對象化的設計,將數(shù)據(jù)查詢條件封裝為一個對象。簡單來講,Criteria Query可以看作是傳統(tǒng)SQL的對象化表示,如:
      Criteria criteria = session.createCriteria(TUser.class);
      criteria.add(Expression.eq("name","Erica"));
      criteria.add(Expression.eq("sex",new Integer(1)));
      這里的criteria 實例實際上是SQL “Select * from t_user where name=’Erica’ and 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無疑是上手的極佳途徑,相對HQL,Criteria Query提供了更易于理解的查詢手段,借助IDE的Coding Assist機制,Criteria的使用幾乎不用太多的學習。
      Criteria 查詢表達式
      Criteria 本身只是一個查詢容器,具體的查詢條件需要通過Criteria.add方法添加到Criteria實例中。
      如前例所示,Expression 對象具體描述了查詢條件。針對SQL 語法,Expression提供了對應的查詢限定機制,包括:
      方法 描述
      Expression.eq 對應SQL“field = value”表達式。
      如Expression.eq("name","Erica")
      Expression.allEq 參數(shù)為一個Map對象,其中包含了多個屬性-值對應關系。相當于多個Expression.eq關系的疊加。
      Expression.gt 對應SQL中的 “field > value ” 表達式
      Expression.ge 對應SQL中的 “field >= value” 表達式
      Expression.lt 對應SQL中的 “field < value” 表達式
      Expression.le 對應SQL中的 “field <= value” 表達式
      Expression.between 對應SQL中的 “between” 表達式
      如下面的表達式表示年齡(age)位于13到50區(qū)間內。
      Expression.between("age",new Integer(13),new Integer(50));
      Expression.like 對應SQL中的 “field like value” 表達式
      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關系組合。
      如:
      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"));
      criteria.addOrder(Order.desc("groupId"));
      Criteria作為一種對象化的查詢封裝模式,不過由于Hibernate在實現(xiàn)過程中將精力
      更加集中在HQL查詢語言上,因此Criteria的功能實現(xiàn)還沒做到盡善盡美(這點上,OJB
      的Criteria 實現(xiàn)倒是值得借鑒),因此,在實際開發(fā)中,建議還是采用Hibernate 官
      方推薦的查詢封裝模式:HQL。
      Hibernate Query Language (HQL)
      Criteria提供了更加符合面向對象編程模式的查詢封裝模式。不過,HQL(Hibernate
      Query Language)提供了更加強大的功能,在官方開發(fā)手冊中,也將HQL作為推薦的查詢
      模式。
      相對Criteria,HQL提供了更接近傳統(tǒng)SQL語句的查詢語法,也提供了更全面的特性。
      最簡單的一個例子:
      String hql = "from org.hibernate.sample.TUser";
      Query query = session.createQuery(hql);
      List userList = query.list();
      上面的代碼將取出TUser的所有對應記錄。
      如果我們需要取出名為“Erica”的用戶的記錄,類似SQL,我們可以通過SQL 語句加
      以限定:
      String hql =
      "from org.hibernate.sample.TUser as user where user.name=‘Erica‘";
      Query query = session.createQuery(hql);
      List userList = query.list();
      其中我們新引入了兩個子句“as”和“where”,as子句為類名創(chuàng)建了一個別名,而where
      子句指定了限定條件。
      HQL 子句本身大小寫無關,但是其中出現(xiàn)的類名和屬性名必須注意大小寫區(qū)分。
      關于HQL,Hibernate 官方開發(fā)手冊中已經(jīng)提供了極其詳盡的說明和示例,詳見
      Hibernate官方開發(fā)手冊(Chapter 11)。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多