91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate Criteria進階查詢怎么使用

發布時間:2021-12-06 09:29:12 來源:億速云 閱讀:144 作者:iii 欄目:編程語言

這篇文章主要介紹“Hibernate Criteria進階查詢怎么使用”,在日常操作中,相信很多人在Hibernate Criteria進階查詢怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hibernate Criteria進階查詢怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

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

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

Criteria criteria = session.createCriteria(User.class);  criteria.addOrder(Order.asc("age"));  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筆資料(如果有的話):

Criteria criteria = session.createCriteria(User.class);  criteria.setFirstResult(51);  criteria.setMaxResults(50);  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"作平均:

Criteria criteria = session.createCriteria(User.class);  criteria.setProjection(Projections.avg("age"));  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:

Criteria criteria = session.createCriteria(User.class);  criteria.setProjection(Projections.groupProperty("age"));  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,例如下面的程式會計算每個年齡各有多少個人:

ProjectionList projectionList = Projections.projectionList();  projectionList.add(Projections.groupProperty("age"));  projectionList.add(Projections.rowCount());    Criteria criteria = session.createCriteria(User.class);  criteria.setProjection(projectionList);  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也不方便,如果有一個已知的物件,則可以根據這個物件作為查詢的依據,看看是否有屬性與之類似的物件,例如:

User user = new User();  user.setAge(new Integer(30));   Criteria criteria = session.createCriteria(User.class);  criteria.add(Example.create(user));   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開頭的資料:

Criteria criteria = session.createCriteria(User.class);  criteria.add(Restrictions.sqlRestriction(  "{alias}.name LIKE (?)", "cater%", Hibernate.STRING));  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子句的查詢,則可以如下:

Criteria criteria = session.createCriteria(User.class);  Integer[] ages = {new Integer(20), new Integer(40)};  Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};  criteria.add(Restrictions.sqlRestriction(  "{alias}.age BETWEEN (?) AND (?)", ages, types));  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 (?)

到此,關于“Hibernate Criteria進階查詢怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞金市| 团风县| 晋宁县| 沾化县| 嘉祥县| 阿克| 古蔺县| 西充县| 呼图壁县| 泰州市| 峨山| 高碑店市| 治县。| 全南县| 中方县| 友谊县| 闸北区| 垦利县| 富川| 宿迁市| 德兴市| 南溪县| 伊宁市| 武邑县| 平安县| 长葛市| 巴中市| 区。| 会泽县| 宜兰市| 会同县| 新兴县| 额尔古纳市| 亳州市| 板桥市| 睢宁县| 北川| 高碑店市| 桃园县| 蒲城县| 兰坪|