成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate中的Criteria條件查詢

開發 后端
向您介紹在Hibernate中使用Criteria條件查詢,并對Criteria條件查詢的詳細方法和描述做詳細介紹。

Criteria Query通過面向對象化的設計,將數據查詢條件封裝為一個對象。簡單來講,Criteria條件查詢可以看作是傳統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=’Erica’ and sex=1”的封裝(我們可以打開Hibernate 的show_sql 選項,以觀察Hibernate在運行期生成的SQL語句。

Hibernate 在運行期會根據Criteria 中指定的查詢條件(也就是上面代碼中通過criteria.add方法添加的查詢表達式)生成相應的SQL語句。這種方式的特點是比較符合Java 程序員的編碼習慣,并且具備清晰的可讀性。正因為此,不少ORM實現中都提供了類似的實現機制(如Apache OJB)。

對于Hibernate的初學者,特別是對SQL了解有限的程序員而言,Criteria條件查詢無疑是上手的極佳途徑,相對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 參數為一個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區間內。

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關系組合。
如:
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在運行期使用當前關聯的POJO別名替換。

注意Expression 各方法中的屬性名參數(如Express.eq中的第一個參數),這里所謂屬性名是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在實現過程中將精力更加集中在HQL查詢語言上,因此Criteria的功能實現還沒做到盡善盡美(這點上,OJB的Criteria 實現倒是值得借鑒),因此,在實際開發中,建議還是采用Hibernate 官方推薦的查詢封裝模式:HQL。

 

【編輯推薦】

  1. Hibernate2和Hibernate3連接池配置
  2. Hibernate 連接池的配置方式
  3. Hibernate 存儲過程的調用
  4. 關于Hibernate級聯刪除的問題
  5. Hibernate 刪除出現異常的解決方案
責任編輯:佚名 來源: JavaEye
相關推薦

2009-06-18 10:07:03

CriteriaHibernate

2009-06-26 16:15:04

Criteria的用法Hibernate

2009-06-30 16:46:45

Criteria進階查

2009-06-30 16:44:10

Criteria基本查

2009-06-30 16:55:19

2009-09-24 13:03:38

Hibernate C

2009-09-28 12:57:54

Hibernate C

2009-06-29 09:03:31

Hibernate多條

2009-09-22 15:26:30

Hibernate多表

2009-06-30 16:57:21

Criteria查詢

2009-06-18 12:59:39

Criteria Qu深入淺出Hiberna

2009-06-26 10:01:00

Hibernate的查

2009-09-25 16:57:49

Hibernate查詢

2009-09-23 09:16:25

Hibernate復合

2009-11-13 09:24:58

JPA 2.0Criteria AP

2009-06-29 18:26:46

HibernateHQL查詢

2009-06-26 10:32:00

QBC查詢Hibernate

2009-09-27 10:19:11

Hibernate命名

2009-09-29 16:29:40

Hibernate查詢

2009-06-18 09:47:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网址在线 | 国产精品久久久久久久久久久久午夜片 | 精品91久久久 | 久草在线视频中文 | 欧洲一区二区在线 | 精品少妇v888av | 性欧美精品一区二区三区在线播放 | 国产美女一区二区 | 亚洲视频欧美视频 | 草逼网站| 久草视| 久久99精品久久久久婷婷 | 一区二区三区精品在线视频 | 成人免费在线视频 | 久久成人精品视频 | 中文字幕在线不卡播放 | 天天夜干 | 91久久久久久久久久久久久 | 国产一区欧美 | 麻豆久久久久久久久久 | 国产亚洲精品精品国产亚洲综合 | 一区二区高清不卡 | 国产乱码精品一区二区三区忘忧草 | 97碰碰碰 | 日韩在线播放网址 | 亚洲精品国产成人 | 久久久综合久久 | 亚洲一区二区三区四区五区中文 | 青娱乐国产 | av一区二区三区四区 | 国产第一页在线观看 | 美女视频一区 | 欧美性久久 | 成人深夜福利 | 日韩有码一区 | 欧区一欧区二欧区三免费 | 97日日碰人人模人人澡分享吧 | 91久久精品一区二区三区 | 久久国产欧美日韩精品 | 欧美日韩一区不卡 | 国产成人精品一区二区在线 |