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

Hibernate之Criteria進階查詢

開發 后端
本文介紹Hibernate中的Criteria進階查詢。使用Criteria進行查詢時,不僅僅能組合出SQL中where子句的功能,還可以組合出如排序、統計、分組等的查詢功能。

使用Criteria進行查詢時,不僅僅能組合出SQL中where子句的功能,還可以組合出如排序、統計、分組等的查詢功能。這就是Criteria進階查詢。

排序
您可以使用Criteria進行查詢,并使用org.hibernate.criterion.Order對結果進行排序,例如使用Oder.asc(),指定根據”age”由小到大排序(反之則使用desc()):

  1. Criteria criteria = session.createCriteria(User.class);  
  2. criteria.addOrder(Order.asc("age"));  
  3. List users = criteria.list(); 

注意在加入Order條件時,使用的是addOrder()方法,而不是add()方法,在產生SQL語句時,會使用order by與asc(desc)來進行排序指定:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ order by this_.age asc

限定查詢筆數
Criteria的setMaxResults()方法可以限定查詢回來的筆數,如果配合setFirstResult()設定傳回查詢結果***筆資料的位置,就可以實現簡單的分頁,例如傳回第51筆之后的50筆資料(如果有的話):

  1. Criteria criteria = session.createCriteria(User.class);  
  2. criteria.setFirstResult(51);  
  3. criteria.setMaxResults(50);  
  4. List users = criteria.list(); 

根據您所指定得資料庫,Hibernate將自動產生與資料庫相依的限定筆數查詢子句,例如在MySQL中,將使用limit產生以下的SQL語句:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ limit ?, ?

統計動作
您可以對查詢結果進行統計動作,使用 org.hibernate.criterion.Projections的avg()、rowCount()、count()、max()、min ()、 countDistinct()等方法,再搭配Criteria的setProjection()方法加入條件設定,例如對查詢結果的"age"作平均:

  1. Criteria criteria = session.createCriteria(User.class);  
  2. criteria.setProjection(Projections.avg("age"));  
  3. List users = criteria.list(); 

上面的程式將由Hibernate自動產生SQL的avg函數進行平均計算:

Hibernate: select avg(this_.age) as y0_ from T_USER this_

分組
還可以配合Projections的groupProperty()來對結果進行分組,例如以"age"進行分組,也就是如果資料中"age"如果有 20、20、25、30,則以下會顯示20、25、30:

  1. Criteria criteria = session.createCriteria(User.class);  
  2. criteria.setProjection(Projections.groupProperty("age"));  
  3. List users = criteria.list(); 

上面的程式將由Hibernate自動產生SQL的group by子句進行分組計算:

Hibernate: select this_.age as y0_ from T_USER this_ group by this_.age

如果想同時結合統計與分組功能,則可以使用org.hibernate.criterion.ProjectionList,例如下面的程式會計算每個年齡各有多少個人:

  1. ProjectionList projectionList = Projections.projectionList();  
  2. projectionList.add(Projections.groupProperty("age"));  
  3. projectionList.add(Projections.rowCount());  
  4.  
  5.  
  6. Criteria criteria = session.createCriteria(User.class);  
  7. criteria.setProjection(projectionList);  
  8. List users = criteria.list();  

觀察所產生的SQL語句,將使用group by先進行分組,再針對每個分組進行count函數的計數,

Hibernate: select this_.age as y0_, count(*) as y1_ from T_USER this_ group by this_.age

根據已知物件進行查詢
設定查詢條件并非一定要使用Restrictions,如果屬性條件很多,使用Restrictions也不方便,如果有一個已知的物件,則可以根據這個物件作為查詢的依據,看看是否有屬性與之類似的物件,例如:

  1. User user = new User();  
  2. user.setAge(new Integer(30));  
  3.  
  4. Criteria criteria = session.createCriteria(User.class);  
  5. criteria.add(Example.create(user));  
  6.  
  7. List users = criteria.list();  

Criteria進階查詢中,您可以透過 org.hibernate.criterion.Example的create()方法來建立Example實例,Example實作了 Criteria介面,因此可以使用add()方法加入至Criteria條件設定之中,Hibernate將自動過濾掉空屬性,根據已知物件上已設定的屬性,判定是否產生于where子句之中:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=?)

設定SQL范本
如果您了解如何撰寫SQL語句,想要設定一些Hibernate產生SQL時的范本,您也可以使用Restrictions的sqlRestriction()方法,提供SQL語法范本作限定查詢,例如查詢name以cater開頭的資料:

  1. Criteria criteria = session.createCriteria(User.class);  
  2. criteria.add(Restrictions.sqlRestriction(  
  3. "{alias}.name LIKE (?)", "cater%", Hibernate.STRING));  
  4. List users = criteria.list(); 

其中alias將被替換為與User類別相關的名稱,而? 將被替換為cater%,也就是第二個參數所提供的值,sqlRestriction()方法***個參數所設定的是where子句的部份,所以在SQL撰寫時,不必再寫where,觀察所產生的SQL語句,將使用您所設定的SQL范本作為基礎,來完成SQL的條件查詢:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.name LIKE (?)

如果有多個查詢條件,例如between子句的查詢,則可以如下:

  1. Criteria criteria = session.createCriteria(User.class);  
  2. Integer[] ages = {new Integer(20), new Integer(40)};  
  3. Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};  
  4. criteria.add(Restrictions.sqlRestriction(  
  5. "{alias}.age BETWEEN (?) AND (?)", ages, types));  
  6. List users = criteria.list(); 

觀察所產生的SQL語句如下:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.age BETWEEN (?) AND (?)

Criteria進階查詢就介紹到這里。

【編輯推薦】

  1. Hibernate緩存簡介及分類
  2. Hibernate中generator屬性的意義
  3. hibernate Key Generator 主鍵生成方式
  4. Hibernate之Criteria基本查詢
  5. Hibernate的事務:事務對象的方法
責任編輯:book05 來源: 百度博客
相關推薦

2009-06-30 16:44:10

Criteria基本查

2009-06-17 14:17:40

Criteria條件查Hibernate

2009-06-30 16:55:19

2009-09-28 12:57:54

Hibernate C

2009-09-24 13:03:38

Hibernate C

2009-06-26 16:15:04

Criteria的用法Hibernate

2009-06-18 10:07:03

CriteriaHibernate

2009-06-08 10:20:01

Hibernate查詢

2009-06-18 12:59:39

Criteria Qu深入淺出Hiberna

2009-06-30 16:57:21

Criteria查詢

2009-11-13 09:24:58

JPA 2.0Criteria AP

2011-07-18 14:38:44

子查詢外部查詢

2009-06-18 09:47:50

2009-09-29 16:29:40

Hibernate查詢

2009-09-27 10:19:11

Hibernate命名

2009-06-18 09:14:08

Hibernate H

2009-06-17 08:47:00

Hibernate優化

2009-06-26 10:01:00

Hibernate的查

2009-09-24 15:27:41

Hibernate查詢

2009-09-22 08:39:59

Hibernate F
點贊
收藏

51CTO技術棧公眾號

亚洲成av人在线观看| 色a资源在线| 欧美疯狂party性派对| 成人精品视频网站| 国产精品日韩av| 日韩精品三区| 亚洲成av人片在线观看香蕉| 男女午夜刺激视频| 高清视频一区二区| 国内成+人亚洲| 中文一区在线| 91九色单男在线观看| 成人免费av| 国产欧美日韩精品丝袜高跟鞋| julia中文字幕一区二区99在线| 精品国产乱码久久久久久浪潮| 天堂网www中文在线| 亚洲国产日韩a在线播放性色| 国产福利在线免费| 亚洲乱码国产乱码精品精的特点| 欧美牲交a欧美牲交aⅴ免费下载| 欧美国产乱视频| 亚洲jjzzjjzz在线观看| 国产日韩精品久久久| 和岳每晚弄的高潮嗷嗷叫视频| 狠狠色丁香婷综合久久| 超碰10000| 亚洲无毛电影| 亚洲精品视频一区二区三区| 国产精品白丝av| 国产中文字幕二区| 蜜桃传媒麻豆第一区在线观看| 高清不卡亚洲| 色婷婷**av毛片一区| 欧美极品免费| 久久久av电影| 美女福利一区| 日韩av免费一区| 欧美全黄视频| 肉大捧一出免费观看网站在线播放| 丁香六月综合激情| 神马伦理电影| 日韩精品日韩在线观看| 日韩精品免费一区二区三区竹菊| 99re国产视频| 成人av网址在线| 欧美性孕妇孕交| 正在播放亚洲1区| 亚洲澳门在线| 佐佐木明希av| 色综合久久综合| 欧美xxxxxx| 久久精品国产精品| 国产亚洲亚洲| www.日本xxxx| 久久中文字幕在线| 婷婷成人在线| 日韩成人久久久| 激情av网站| 综合激情成人伊人| 丝袜美腿玉足3d专区一区| 美女尤物久久精品| 亚洲ai欧洲av| 七七成人影院| 国产在线播放91| 26uuu久久综合| 调教视频在线观看| 亚洲2020天天堂在线观看| 日本中文字幕一区| 91短视频版在线观看www免费| 色综合五月天导航| 久久久久久久久99精品大| 99热这里只有精品免费| ...av二区三区久久精品| 国产系列在线观看| 在线观看免费网站| 欧美精品一区二区在线播放 | 国产美女福利在线观看| 伦伦影院午夜日韩欧美限制| 紧缚捆绑精品一区二区| 精精国产xxxx视频在线中文版| 国产欧美日韩免费看aⅴ视频| 国产成人精品aa毛片| 国产va在线视频| ijzzijzzij亚洲大全| 亚洲高清色综合| 国产999精品久久久久久绿帽| 国产盗摄一区二区| 佐佐木明希av| 日韩中文字幕精品| 国产精品视频九色porn| 日本欧美韩国国产| 久蕉依人在线视频| 欧洲精品码一区二区三区免费看| 色婷婷一区二区三区四区| 精品久久影视| 麻豆传媒在线视频| 国产伦精品一区二区三区视频孕妇 | 亚洲视频精品在线观看| 日本一区二区久久精品| 日韩精品免费在线观看| 国产精品一区二区在线看| 日韩毛片一区| 亚洲第一导航| 久久久久久久久久亚洲| 婷婷丁香久久五月婷婷| 久热精品在线| 狠狠色狠狠色综合婷婷tag| 影音先锋日韩精品| 在线观看黄色| 浮妇高潮喷白浆视频| 91久久国产婷婷一区二区| 欧美r级电影在线观看| 激情欧美日韩| 天海翼亚洲一区二区三区| 色偷偷福利视频| 91免费人成网站在线观看18| 欧美日韩国产在线| 韩国成人精品a∨在线观看| 欧美女优在线视频| 国产成人午夜性a一级毛片| 在线综合视频网站| 国内精品伊人久久久久av影院| 精品视频一区二区在线| 国产超碰91| 中文国产亚洲喷潮| 日韩精品久久久免费观看| 久久精品国产99精品国产亚洲性色| 亚洲国产综合色| 91精品天堂福利在线观看| 国产福利不卡| 成人淫片免费视频95视频| 狠狠色丁香婷综合久久| 成人三级小说| 中文字幕在线视频不卡| 无码人妻精品一区二区三区66| 日韩国产美国| 国产精品一 二 三| 成人精品久久一区二区三区| 97国产精品久久| 国内精品免费午夜毛片| 欧美激情第三页| 久久久国产精品x99av| 亚洲人午夜色婷婷| 亚洲色在线视频| 国产精品无人区| 国产一区二区区别| 韩日一区二区| 欧洲成人一区| 精品成人18| 日日夜夜亚洲| 成人做爰视频www| 欧美一级做a| 涩涩视频在线| 午夜欧美巨大性欧美巨大 | av在线不卡网| 久久久精品免费网站| 久久久久久久综合日本| 欧美午夜丰满在线18影院| 欧美日韩国产综合一区二区三区| 国产精品免费网站在线观看| 中文字幕av不卡| 午夜亚洲国产au精品一区二区| 亚洲欧美日韩人成在线播放| 欧美精选午夜久久久乱码6080| 精品视频—区二区三区免费| 日韩女优av电影| 欧美激情一区二区久久久| 国产专区欧美专区| caoporen国产精品| 国产免费毛卡片| 噼里啪啦在线中文观看| 日本一道高清亚洲日美韩| 午夜精品福利影院| 久久综合图片| 寂寞少妇一区二区三区| 亚洲自拍偷拍图区| 精品国产在天天线2019| 亚洲第一中文字幕在线观看| 亚洲国产精品字幕| 国产精品99免视看9| 欧美日本韩国在线| 欧美精品亚洲二区| 日韩中文字幕视频| 韩日午夜在线资源一区二区| 视频一区亚洲| gogogo影视剧免费观看在线观看| 精品欧美一区二区三区在线观看| 国产一区三区在线播放| 91小视频免费看| 日本道在线观看一区二区| 亚洲天堂网站在线观看视频| 日韩欧美亚洲区| 色就是色亚洲色图| 9999国产精品| 亚洲成a天堂v人片| 2020欧美日韩在线视频| 成人网18入口| 红杏aⅴ成人免费视频| 久久免费的精品国产v∧|