国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深入淺出Hibernate學習筆記 Criteria Query

開發 后端
本文是對深入淺出Hibernate學習做的學習筆記,是個人在對深入淺出Hibernate學習中的一點認識和看法,下邊是具體的內容。

本文是對深入淺出Hibernate學習做的學習筆記,是個人在對深入淺出Hibernate學習中的一點認識和看法,下邊是具體的內容。

Criteria Query通過面向對象的設計,將數據查詢條件封裝為一個對象。簡單來說,Criteria Query可以看作是傳統SQL的對象化表示,如:

  1. Criteria criteria=session.createCriteria(TUser.class);  
  2. criteria.add(Expression.eq("name","Erica"));  
  3. criteria.add(Expression.eq("sex",new Integer(1)); 

這里的criteria實例本質上是對SQL“select * from t_user where name='Erica' and sex=1”的封裝。Hibernate在運行期會根據Criteria中指定的查詢條件生成相應的SQL語句。

Criteria查詢表達式:Criteria本身只是一個容器,具體的查詢條件要通過Criteria.add方法添加到Criteria實例中。

方法描述:Expression.eq 對應SQL “field=value”表達式

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

  1. Expression.allEq 參數為一個Map對象,其中包含了多個屬性-值對應關系。相當于多個Expression.eq關系的疊加   
  2. Expression.gt 對應SQL“field>value”表達式   
  3. Expression.ge 對應SQL“field>=value”表達式   
  4. Expression.lt 對應SQL“field<value”表達式   
  5. Expression.le 對應SQL“field<=value”表達式   
  6. Expression.between 對應SQL“between”表達式 

如:

  1. Expression.between("age",new Integer(13),new Integer(50));   
  2. Expression.like 對應SQL"field like valule"表達式   
  3. Expression.in 對應SQL“field in...”表達式   
  4. Expression.eqproperty 用于比較兩個屬性之間的值,對應SQL“field>field”   
  5. Expression.gtProperty 用于比較兩個屬性之間的值,對應SQL“field>=field”   
  6. Expression.ltProperty 用于比較兩個屬性之間的值,對應SQL"field<field"   
  7. Expression.leProperty 用于比較兩個屬性之間的值,對應SQL"field<=field"   
  8. Expression.and and關系組合,如:  
  9. Expression.add(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1)))  
  10. Expression.or or關系組合,如:  
  11. Expression.or(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1)))   
  12. Expression.sql 作為補充,本方法提供了原生SQL語法的支持,我們可以通過這個方法直接通過SQL語句限定查詢條件 

下面的代碼返回所有名稱以"Erica"其實的記錄:

  1. Expression.sql("lower({alias}.name) like lower(?)","Erica%",Hibernate.STRING); 

其中的"{alias}"將Hibernate在運行期使用當前關聯的POJO別名替換,在Hibernate3中,引入了Restrictions類作為Expression的替代。

示例查詢:

Example類實現了Criteria接口,同樣,它也可以用作Criteria的查詢條件。Example的作用是:根據已有對象,查找屬性與之相符的其他對象。

  1. Criteria criteria=session.CreateCriteria(TUser.class);  
  2. TUser exampleUser=new TUser();  
  3. exapleUser.getName("Erica");  
  4. criteria.add(Example.create(exampleUser));  
  5. List<TUser> list=criteria.list();  
  6. for(TUser user:list){  
  7. System.out.println(user.getName());  

新建一個TUser對象exampleUser,并作為范本,查詢所有name屬性與之相同的記錄。

復合查詢:

  1. Criteria criteria=session.createCriteria(TUser.class);  
  2. Criteria addrCriteria=criteria.createCriteria("addresses");  
  3. addrCriteria.add(Expression.like("addresses","%shanghai%"));  
  4.  
  5. List<TUser> list = criteria.list();  
  6. for(TUser user:list){  
  7.     System.out.println(user.getName());  
  8.     Set<TAddress> addrSet=user.getAddresses();  
  9.     for(TAddress addr:addrSet){  
  10.         System.out.println(addr.getAddress());  
  11.     }  

深色部分就是我們新增的復合查詢條件,可以看到,我們可以通過Criteria.createCriteria方法在原有Criteria對象的基礎上構建復合查詢。

DetachedCriteria:

Hibernate2中,Criteria生命周期位于其宿主Session生命周期中,也就是說,由某個session創建的Criteria實例,一旦session銷毀,那么此Criteria實例也隨之失效。

Hibernate3中引入了DetachedCriteria,DetachedCriteria可以脫離session實例獨立存在,這樣,我們就可以將某些通用的Criteria查詢條件進行抽離,每次使用時再與當前session實例綁定以獲得更好的代碼重用效果。

  1. DetachedCriteria deCriteria=DetachedCriteria.forClass(TUser.class);  
  2. deCriteria.add(Expression.eq("name","Erica"));  
  3. deCriteria.add(Expression.eq("sex",new Integer(1)));  
  4. Criteria criteria=deCriteria.getExecutableCriteria(session);  
  5. List<TUser> list=criteria.list();  
  6. for(TUser user:list){  
  7.     System.out.println(user.getName());  

DetachedCriteria的生存周期與session實例無關,我們可以獨立創建DetachedCriteria實例,并在需要使用時與session相綁定,從而獲得運行期Criteria實例。這樣,我們就可以將查詢邏輯和Criteria實例分離,以獲得***化代碼的重用效果。

DetachedCriteria也可以用于子查詢表達:

  1. DetachedCriteria aveAge=DetachedCriteria.forClass(TUser.class);  
  2. avgAge.setProjection(Projections.avg("age"));  
  3. Criteria criteria=session.createCriteria(TUser.class);  
  4. criteria.add(Subqueries.propertyGT("age",avgAge)); 

通過Subqueries我們可以將DetachedCriteria納入查詢表達式,反映在SQL上則是一個典型的子查詢語句。上例生成的SQL語句大致如:select ... from T_User where age > (select avg(age) from T_User)

Criteria高級特性,限定返回的記錄范圍,通過criteria.setFirstResult/setMaxResults方法可以限制一次查詢返回的記錄范圍:

  1. Criteria criteria=session.createCriteria(TUser.class);  
  2. //限定查詢返回檢索結果中,從100條結果開始的20條記錄  
  3. criteria.setFirstResult(100);  
  4. criteria.setMaxResults(20);        記錄排序:  
  5. //  
  6. //  
  7. Criteria criteria=session.createCriteria(TUser.class);  
  8. criteria.add(Expression.eq("groupId",new Integer(2)));  
  9.  
  10. criteria.addOrder(Order.asc("name"));  
  11. criteria.addOrder(Order.desc("groupId")); 

分組與統計:

在Hibernate3中,我們還可以通過Criteria完成分組和統計。分組、統計表達式由Hibernate3新引入的Projections Class進行封裝。

  1. Criteria criteria=session.createCriteria(TUser.class);  
  2. criteria.setProjection(Projections.groupProperty("age"));  
  3. List<TUser> list=criteria.list();  
  4. for(TUser user:list){  
  5.     System.out.println(user);  

上例對當前的TUser記錄按照年齡進行分組。通過Projections.groupProperty方法,我們指定了用于分組的目標屬性“age”。生成的SQL語句:select this.age as y0_ from T_User this_group by this_.age。另外,對于多條件組合的統計、分組功能,我們可以借助ProjectionList完成,下面的例子中,我們統計了各個年齡層次中的用戶數量:

  1. ProjectionList projectionlist=Projections.ProjectionList();  
  2. projectionList.add(Projections.groupProperty("age"));  
  3. projectionList.add9Projections.rowCount());  
  4. Criteria criteria=session.createCriteria(TUser.class);  
  5. criteria.setProjection(projectionList); 

 


 

【編輯推薦】

  1. 強人Hibernate文檔筆記(上)
  2. 強人Hibernate文檔筆記(中)
  3. 強人Hibernate文檔筆記(下)
  4. Hibernate一對多關系的處理
  5. Hibernate的性能優化
責任編輯:仲衡 來源: MeChecksV博客
相關推薦

2009-11-30 16:46:29

學習Linux

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構調度器

2021-07-20 15:20:02

FlatBuffers阿里云Java

2012-05-21 10:06:26

FrameworkCocoa

2022-09-26 09:01:15

語言數據JavaScript

2022-11-09 08:06:15

GreatSQLMGR模式

2019-11-11 14:51:19

Java數據結構Properties

2022-12-02 09:13:28

SeataAT模式

2025-03-27 09:38:35

2019-12-04 10:13:58

Kubernetes存儲Docker

2012-02-21 13:55:45

JavaScript

2021-04-27 08:54:43

ConcurrentH數據結構JDK8

2022-01-11 07:52:22

CSS 技巧代碼重構

2018-11-09 16:24:25

物聯網云計算云系統

2022-10-31 09:00:24

Promise數組參數

2009-11-18 13:30:37

Oracle Sequ

2009-11-17 17:31:58

Oracle COMM
點贊
收藏

51CTO技術棧公眾號

精品亚洲va在线va天堂资源站| 裸体一区二区| 嫩草影院中文字幕| 亚洲日韩欧美视频| 成人午夜在线免费| 国产美女亚洲精品7777| 99热在线这里只有精品| 久久精品国产亚洲精品| 亚洲国产精品精华液2区45| 精品午夜电影| 中文字幕在线视频不卡| 91九色视频在线观看| 在线视频中文字幕一区二区| 国产日韩欧美一区在线| 成人三级网址| 中日韩在线视频| xxx欧美精品| 中文字幕视频一区| 围产精品久久久久久久| 午夜免费福利在线观看| 亚洲精品成人久久久998| 在线观看不卡av| 国产精品第五页| 中文字幕av亚洲精品一部二部| 中文字幕在线三区| 黄色免费视频大全| 国产精品激情av电影在线观看 | 亚洲超碰97人人做人人爱| 久久99导航| 亚洲白虎美女被爆操| 成人av在线一区二区三区| 林ゆな中文字幕一区二区| 日韩大片b站免费观看直播| 日韩精品另类天天更新| 最近2019年中文视频免费在线观看 | 久久麻豆精品| 在线观看小视频| 精品少妇一区二区三区在线| 人人澡人人澡人人看欧美| 欧美色偷偷大香| 成人免费视频一区| 欧美疯狂party性派对| wwwww亚洲| jizz蜜桃视频在线观看| 欧美污视频久久久| 欧美国产日韩在线| 欧美日韩国产色站一区二区三区| 国产ts人妖一区二区| 成人综合久久| 韩日毛片在线观看| ga∨成人网| 久久91精品国产91久久久| 精品福利在线视频| 国产自产2019最新不卡| 自拍偷拍欧美一区| 黄色网址在线免费观看| 青青视频在线播放| www.成人三级视频| 久久国产色av| 高清久久久久久| 欧美色蜜桃97| 日韩电影免费观看高清完整版| 日本加勒比高清在线| 日韩高清av| 日韩美女免费视频| 亚洲视频在线免费看| 色婷婷亚洲综合| 久久色中文字幕| 香蕉成人久久| 国产一区二区精品久| www555久久| 午夜成人影视| 久久精品99国产| 日本10禁啪啪无遮挡免费一区二区| 欧美高清激情视频| 亚洲国产欧美一区二区丝袜黑人 | 国产亚洲一区二区三区四区 | 日韩欧美亚洲成人| 2014亚洲片线观看视频免费| 国产一区二区三区的电影 | 北条麻妃高清一区| 久久久久久这里只有精品| 日韩精品一区二区三区蜜臀 | 亚洲午夜久久| 色婷婷综合久久久中字幕精品久久 | 国产亚洲久久| av毛片午夜不卡高**水| 欧美一区二区视频| 国产精品宾馆在线精品酒店| 免费看成人午夜电影| 国产精品一区二区3区| 久久伊人色综合| 亚洲第一中文字幕| 在线免费观看视频一区| 亚洲精品免费一二三区| 99re视频精品| 激情综合一区二区三区| 一本久道久久综合狠狠爱| 久久亚洲成人| 日韩精品免费一区二区夜夜嗨| 成人精品国产亚洲| 51精品视频| 毛片免费不卡| 青青久草在线| 97影视大全免费追剧大全在线观看| 国产精品宾馆在线精品酒店| 在线国产伦理一区| 久久精品一二三区| 99re视频| 国产精品丝袜高跟| 日韩女优人人人人射在线视频| 久久国产视频网站| 色阁综合伊人av| 亚洲码在线观看| 亚洲第一区中文字幕| 日韩精品一区二| 欧美一级在线视频| 欧美日韩国产123区| 欧美亚洲愉拍一区二区| 色天天综合色天天久久| 欧美日韩另类在线| 精品久久久久久久中文字幕| 一区二区不卡在线播放 | 国产一区二区三区三区在线观看 | 国产在线精品一区在线观看麻豆| 99在线观看免费视频精品观看| 亚洲欧美综合国产精品一区| 日韩欧美三级| 欧美高清视频手机在在线| 日韩欧美精品一区| 国产精品久久久乱弄 | 亚洲天堂精品在线观看| 91视频观看视频| 久久久精品国产免费观看同学| 2023国产一二三区日本精品2022| 99久久精品国产导航| av网站免费在线观看| 欧美欧美欧美| porn视频在线观看| 日本三级视频在线观看| 日韩av中文| 污污视频在线看| 在线人成日本视频| 久久精品资源| 日韩一级淫片| 欧美三级午夜理伦三级在线观看 | 国产一区二区免费视频| 国产成人自拍在线| 91欧美一区二区| 国产精品视频在线看| 一区二区三区四区高清精品免费观看| 亚洲一区二区中文在线| 精品国产鲁一鲁一区二区张丽| 色一区在线观看| 日韩欧美一级二级三级| 亚洲精品小视频| 精品国产网站地址| 4k岛国日韩精品**专区| 国产精品视频精品| 国产高清在线精品一区二区三区| 欧美男人的天堂| 真实国产乱子伦对白视频| www.com操| 免费黄网站在线观看| 欧美人与性动交α欧美精品济南到 | 免费a在线观看| 中文字幕在线播放网址| 二区三区不卡| www国产精品| 欧美freesextv| 老色鬼久久亚洲一区二区| 成人毛片视频在线观看| 亚洲欧美激情小说另类| 欧美日韩在线不卡| 一区二区三区无码高清视频| 57pao精品| 麻豆av一区| 青青视频在线播放| 头脑特工队2在线播放| 91福利在线尤物| 成人免费直播在线| 欧美日韩亚洲一区二区三区在线| 久久国产精品一区二区| 久久精品人人爽人人爽| 色偷偷久久一区二区三区| 亚洲精品一区中文| 日韩美女中文字幕| 无遮挡亚洲一区| 校园春色 亚洲色图| 超碰免费在线观看| 91成人在线| 99久久精品费精品国产风间由美| 人禽交欧美网站| 亚洲四区在线观看| 欧美一区二区成人6969| 欧美精品xxx| 欧美国产综合视频| 午夜免费高清视频| 国产黄色在线免费观看| 国产第一页视频|