Java-EE輕量級框架應用開發(fā) Hibernate查詢_第1頁
Java-EE輕量級框架應用開發(fā) Hibernate查詢_第2頁
Java-EE輕量級框架應用開發(fā) Hibernate查詢_第3頁
Java-EE輕量級框架應用開發(fā) Hibernate查詢_第4頁
Java-EE輕量級框架應用開發(fā) Hibernate查詢_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、Java-EE輕量級框架應用開發(fā)第7章-Hibernate查詢本章要點v Hibernate的檢索方式的檢索方式vHQL檢索方式檢索方式v條件查詢條件查詢Criteria QueriesvSQL檢索方式檢索方式檢索方式的介紹vOID檢索方式Object Identityv按照對象的OID來檢索對象。Session的get()和load()方法提供了這種功能。如果在應用程序中事先知道了OID,就可以使用這種檢索對象的方式vHQL檢索方式(Hibernate Query Language)v使用面向?qū)ο蟮腍QL查詢語言來檢索對象。Session的find()方法用于執(zhí)行HQL查詢語句vHibern

2、ate還提供了Query接口,它是Hibernate提供的專門的HQL查詢接口,能夠執(zhí)行各種復雜的HQL查詢語句vQBC檢索方式Query By Criteriav使用QBC API來檢索對象。這種API封裝了基于字符串形式的查詢語句,提供了更加面向?qū)ο蟮慕涌?,對特定的持久層對象進行查詢,利于擴展v本地SQL檢索方式v使用本地數(shù)據(jù)庫的SQL查詢語句。Hibernate會負責把檢索到的JDBC ResultSet結(jié)果集映射為持久化對象圖檢索方式的比較v在實際使用中,一種檢索并無根本的優(yōu)劣,而是要看不同的情況,結(jié)合各種查詢的優(yōu)點和缺點,考慮采用哪種檢索會更加簡單和適宜一點vHQL功能最強大,適合各

3、種情況,但是動態(tài)條件查詢構(gòu)造起來很不方便vCriteria最適合動態(tài)條件查詢,不太適合統(tǒng)計查詢,QBE還不夠強大,只適合相當簡單的查詢v本地SQL可以實現(xiàn)特定數(shù)據(jù)庫的SQL,但是可移植性就犧牲了v針對Web應用來說,大局部常規(guī)查詢都是動態(tài)條件查詢,所以首選使用Criteria,并且Hibernate3提供了DetachedCriteria,可以在web層構(gòu)造好DetachedCriteria再進入Session執(zhí)行查詢,非常方便實用v涉及到統(tǒng)計查詢和非常復雜的關(guān)聯(lián)查詢,Criteria就無能為力了,這種情況下選擇使用HQLv如果必須使用某些數(shù)據(jù)庫的特性,那么選擇使用本地SQLv Hiberna

4、te的檢索方式的檢索方式vHQL檢索方式檢索方式v條件查詢條件查詢Criteria QueriesvSQL檢索方式檢索方式HQL簡介vHQL是面向?qū)ο蟮牟樵冋Z言, 它和 SQL 查詢語言有些相似vHQL 是非常有意識的被設計為完全面向?qū)ο蟮牟樵?,它可以理解如繼承、多態(tài)和關(guān)聯(lián)之類的概念vHQL除了 Java 類與屬性的名稱外,查詢語句對大小寫并不敏感vHQL關(guān)鍵字將使用小寫字母,使用完全大寫的關(guān)鍵字會使查詢語句的可讀性更強,但當把查詢語句嵌入到Java語句中的時候使用大寫關(guān)鍵字比較難看功能v在查詢語句中設定各種查詢條件v支持投影查詢, 即僅檢索出對象的局部屬性v支持分頁查詢v支持連接查詢v支持分

5、組查詢, 允許使用 HAVING 和 GROUP BY 關(guān)鍵字v提供內(nèi)置聚集函數(shù), 如sum(), min() 和max()v能夠調(diào)用 用戶定義的SQL函數(shù)或標準的SQL函數(shù)v支持子查詢v支持動態(tài)綁定參數(shù)HQL查詢的步驟v獲取Hibernate Session對象v編寫HQL語句v以HQL為參數(shù),調(diào)用Session的createQuery創(chuàng)立查詢對象如果HQL語句有參數(shù),調(diào)用Query的set方法賦值v調(diào)用Query對象的list等方法返回實例使用HQL查詢數(shù)據(jù)vfrom子句v返回entity.Customer類的所有實例v為了在查詢的其他局部里引用 Customer,需要分配一個別名,關(guān)鍵字

6、 as 是可選的v通常不需要使用類的完整命名 ,因為autoimport自動引入是缺省的情況v查詢語句中別名的開頭局部小寫被認為是實踐中的好習慣,這樣做與 Java 變量的命名標準保持了一致from Customerfrom Customer as customerfrom entity.CustomervCustomer數(shù)據(jù)表,使用HQL查詢所有的數(shù)據(jù)Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Query query = session.

7、createQuery(from Customer);List list = query.list();for (Customer c:list) transaction mit();session.close();vselect 子句v選擇將哪些對象與屬性返回到查詢結(jié)果集中v查詢語句可以返回值為任何類型的屬性v查詢語句可以返回多個對象和或?qū)傩?,存放?Object 隊列中或存放在一個 List 對象中select from Customer as customerselect new list(id, price) from Orders as ordersv聚集

8、函數(shù) avg:計算屬性平均值 count:統(tǒng)計選擇對象的數(shù)量 max:統(tǒng)計屬性值的最大值 min:統(tǒng)計屬性值的最小值 sum:計算屬性值的總和v查詢使用聚集函數(shù)v可以使用關(guān)鍵字 as 給“被選擇了的表達式指派別名v查詢返回一個 Map 的對象,內(nèi)容是別名與被選擇的值組成的名-值映射,與子句 select new map一起使用時最有用select max(price) , min(id) , count(*) from Orders as ordersselect max(price) as maxprice, min(id) as minid, count(*) as n from Orde

9、rs as ordersselect new map(max(price) as maxprice, min(id) as minid, count(*) as n) from Orders as ordersvCustomer數(shù)據(jù)表,使用聚集函數(shù)的HQL查詢Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Query query = session.createQuery(select new map(max(price) as maxpric

10、e, min(id) as minid, count(*) as n) from Orders as orders);List list = query.list();for (int i = 0; i 、=、=、!= 或 等v算術(shù)運算符:,*,/v邏輯運算符:與“AND、或“OR, 非“NOTvIN,NOT IN,ANY,ALL,判斷是否是集合的成員vBETWEEN AND 判斷列值是否滿足指定的區(qū)間vLIKE 匹配模式vIS NOT NULL 測試空值等v如果沒有指定別名,可以使用屬性名來直接引用屬性v如果指派了別名,需要使用完整的屬性名from Customer where name=z

11、hangsanfrom Customer as customer where =zhangsanvorder by 子句v查詢返回的列表list可以按照一個返回的類或組件components中的任何屬性property進行排序v可選的asc或desc關(guān)鍵字指明了按照升序或降序進行排序from Customer customer order by customer.id ascvgroup by子句v一個返回聚集值aggregate values的查詢可以按照一個返回的類或組件components中的任何屬性property進行分組select orders.color

12、, from Orders orders group by orders.pricevOrders數(shù)據(jù)表,使用 group by子句的HQL查詢Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Query query = session.createQuery(select new map(orders.price as price,count(orders.price) as num) from Orders orders group by o

13、rders.price);List list = query.list();for (int i = 0; i list.size(); i+) Map map = (Map) list.get(i);transaction mit();session.close();說明vgroup by 子句與 order by 子句中都不能包含算術(shù)表達式arithmetic expressionsvHibernate 目前不會擴展 group 的實體,因此不能寫 group by People,除非 People 的所有屬性都不是聚集的non-aggregated,必須明確的列出所有的非聚集屬性v Hi

14、bernate的檢索方式的檢索方式vHQL檢索方式檢索方式v條件查詢條件查詢Criteria QueriesvSQL檢索方式檢索方式條件查詢簡介v條件查詢是更具面向?qū)ο筇厣臄?shù)據(jù)查詢方式,可通過如下3個類完成vCriteria,代表一次查詢vCriterion,代表一個查詢條件v,產(chǎn)生查詢條件的工具類執(zhí)行條件查詢的步驟v獲得Hibernate的Session對象v以Session對象創(chuàng)立Criteria對象v增加Criterion查詢條件v執(zhí)行Criteria的list等方法返回結(jié)果集使用條件查詢查詢數(shù)據(jù)v創(chuàng)立一個 Criteria 實例vCriteria接口表示特定持久類的一個查詢,Sess

15、ion 是 Criteria 實例的工廠Criteria criteria = session.createCriteria(Customer.class);List customers = criteria.list();v限制結(jié)果集內(nèi)容v一個單獨的查詢條件是.Criterion接口的一個實例,Restrictions類定義了獲得某些內(nèi)置 Criterion 類型的工廠方法v在查詢中增加了兩個條件,一個是姓名name以“zhang開頭,一個是價格price在10到20之間List customers = session.createCriteria(Customer.class).add(R

16、estrictions.like(name, zhang%) ).add(Restrictions.between(price, 10, 20) ).list();條件查詢支持的各種運算運算類型運算類型運算方法運算方法比較運算比較運算Express.eq()Express.not(Express.eq()Express.ge()Express.lt()Express.le()Express.isNull()Express.isNotNull()范圍運算符范圍運算符Express.in()Express.not(Express.in()Express.between()Express.not(E

17、xpress.between()字符串模式匹配字符串模式匹配Expression.like()邏輯邏輯Expression.and()Expression.or()Expression.not()v Hibernate的檢索方式的檢索方式vHQL檢索方式檢索方式v條件查詢條件查詢Criteria QueriesvSQL檢索方式檢索方式SQL檢索方式vHibernate支持SQL查詢,SQL查詢是通過SQLQuery接口來表示的,SQLQuery接口是Query接口的子接口Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();Query query = session.createQuery(select new map(orders.price as price,count(orders.price) as num

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論