![JavaEE輕量級框架開發(fā)實(shí)用教程 課件 【ch05】Hibernate查詢語言_第1頁](http://file4.renrendoc.com/view/da1af13feae741436cac587f3d880c81/da1af13feae741436cac587f3d880c811.gif)
![JavaEE輕量級框架開發(fā)實(shí)用教程 課件 【ch05】Hibernate查詢語言_第2頁](http://file4.renrendoc.com/view/da1af13feae741436cac587f3d880c81/da1af13feae741436cac587f3d880c812.gif)
![JavaEE輕量級框架開發(fā)實(shí)用教程 課件 【ch05】Hibernate查詢語言_第3頁](http://file4.renrendoc.com/view/da1af13feae741436cac587f3d880c81/da1af13feae741436cac587f3d880c813.gif)
![JavaEE輕量級框架開發(fā)實(shí)用教程 課件 【ch05】Hibernate查詢語言_第4頁](http://file4.renrendoc.com/view/da1af13feae741436cac587f3d880c81/da1af13feae741436cac587f3d880c814.gif)
![JavaEE輕量級框架開發(fā)實(shí)用教程 課件 【ch05】Hibernate查詢語言_第5頁](http://file4.renrendoc.com/view/da1af13feae741436cac587f3d880c81/da1af13feae741436cac587f3d880c815.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Hibernate查詢語言“普通高等教育“十三五”規(guī)劃教材高等學(xué)校計(jì)算機(jī)規(guī)劃教材JavaEE輕量級框架開發(fā)實(shí)用教程第五章在項(xiàng)目開發(fā)中,對數(shù)據(jù)進(jìn)行最多的操作是查詢操作,在JDBC(JavaDataBaseConnectivity,Java數(shù)據(jù)庫連接)中,實(shí)現(xiàn)查詢操作的代碼比較復(fù)雜、容易出錯(cuò)。Hibemate框架對JDBC進(jìn)行了封裝,支持強(qiáng)大且易于使用的HQL,實(shí)現(xiàn)方便的數(shù)據(jù)查詢操作。另外,Hibernate框架也支持原生的SQL語句,雖然這種方式不是很常用。本章將詳細(xì)介紹HQL(HibemateQueryLanguage,Hibernate查詢語言),并簡單介紹原生的SQL語句的查詢方式。Hibernate查詢語言01HQLHQLHQL是一種完全面向?qū)ο蟮牟樵冋Z言,操作的對象是類、實(shí)例、屬性等,支持繼承和多態(tài)等特征。HQL在語句結(jié)構(gòu)上很像SQL的語句結(jié)構(gòu),但二者存在著本質(zhì)區(qū)別,SQL的操作對象是數(shù)據(jù)表和字段等,而HQL操作的對象是類、實(shí)例及其屬性等,在執(zhí)行過程中,Hibemate框架會根據(jù)映射文件的配置和數(shù)據(jù)庫方言將HQL語句轉(zhuǎn)換成可以在相應(yīng)的數(shù)據(jù)庫中執(zhí)行的SQL語句。在Hibernate中,是通過Query接口來執(zhí)行HQL查詢的。通過Query對象,可以使用HQL來執(zhí)行一系列的數(shù)據(jù)庫操作,Query接口是Hibemate的查詢接口,用于在數(shù)據(jù)庫中查詢對象,并控制執(zhí)行查詢的過程。Hibernate查詢語言Hibernate查詢語言方法作用setter方法Query接口提供了一系列的setter方法用于設(shè)置查詢語句中的參數(shù)list。方法list。方法用于執(zhí)行查詢語句,并將査詢結(jié)果以List類型返回iterator。方法iteratorO方法也用于執(zhí)行查詢語句,返回的結(jié)果是一個(gè)Iterator對象,在讀取時(shí)只能按照順序方式讀取uniqiieResult()方法uniqueResult()方法用于返回唯一的結(jié)果,在確保最多只有一個(gè)記錄滿足查詢條件的情況下可以使用該方法executeUpdate()方法executeUpdateQ方法是Hibernate3提供的新特性,可以使用它支持HQL語句的更新和刪除操作,建議更新時(shí)釆用此方法setFirstResultO方法該方法可以設(shè)置所獲取的第一個(gè)記錄的位置,從0開始計(jì)算,用于篩選選取記錄的范圍setMaxResultsQ方法該方法設(shè)置結(jié)果集的最大記錄數(shù),可以與setFirstResultO方法結(jié)合使用,限制結(jié)果集的范圍,在實(shí)現(xiàn)分頁功能時(shí)非常有用Hibernate查詢語言01020304Configurationcfg=newConfiguration;configure;SessionFactorysf=cfg.buildSessionFactory;Sessionsession=sf.openSession;獲得SessionQueryquery=session.createQuery(hql);創(chuàng)建QueryListlist=query.list();HQL的主要作用是進(jìn)行數(shù)據(jù)查詢,但在Hibernate3之后,Hibernate框架對HQL的功能進(jìn)行了擴(kuò)展,它不僅可以進(jìn)行數(shù)據(jù)查詢,還可以進(jìn)行更新和刪除操作。而更新和刪除主要借助executeUpdate()方法。執(zhí)行查詢,獲得結(jié)果HQL查詢語句查詢的是類,以上面的這條語句為例,其中Qx表示Qx類,qxname表示Qx類中的屬性。編寫HQL02HQL常用查詢操作單一屬性查詢所謂單一屬性查詢,指的是查詢某類中的某個(gè)屬性,查詢結(jié)果為該屬性的結(jié)果集列表,列表中的元素類型和實(shí)體類中該屬性的類型一致。Hibernate查詢語言多個(gè)屬性查詢所謂多個(gè)屬性查詢,指的是查詢某類中多個(gè)屬性,查詢結(jié)果為對象數(shù)組列表,列表中的元素類型為對象數(shù)組,對象數(shù)組的長度取決于所要查詢的屬性的個(gè)數(shù),對象數(shù)組中元素的類型取決于屬性在實(shí)體類中的類型。Hibernate查詢語言多個(gè)屬性查詢Hibernate查詢語言0102(1)Stringhql="selecteid,enamefromEmployee";:本例中要查詢的屬性為eid和ename,因此,本例為多個(gè)屬性查詢的范疇。(2)Object[]einfb=(Object[])list.get(i);:列表中的元素類型為對象數(shù)組。對象查詢上例中的多個(gè)屬性查詢的返回結(jié)果為對象數(shù)組的列表,操作起來非常不方便。HQL中還提供了一種返回結(jié)果為對象的查詢,例如HQL語句:“firomEmployee”。這種查詢語句書寫簡練,功能強(qiáng)大,返回的結(jié)果Employee對象,前提條件是Employee類中必須有一個(gè)無參數(shù)的構(gòu)造方法。Hibernate查詢語言無論是from子句還是select子句,都可以使用where子句得到條件查詢的結(jié)果。所謂where直接查詢指的是在where子句中直接寫入?yún)?shù)值的方式。在where子句中,可以使用SQL語句中能夠使用的大多數(shù)運(yùn)算符和函數(shù)等來指定篩選條件,例如比較運(yùn)算符和邏輯運(yùn)算符。比較運(yùn)算符有:=、<>、!=、>、<、>=、between、notbetween、in>notin>is、like、isnull等。邏輯運(yùn)算符有:not>and、or等。where直接查詢Hibernate查詢語言HQL的where子句支持參數(shù)查詢,可以通過傳遞參數(shù)的方式進(jìn)行數(shù)據(jù)查詢。HQL有兩種參數(shù)傳遞形式:一種是位置占位符,另一種是名稱占位符。where參數(shù)查詢Hibernate查詢語言多表連接查詢HQL支持通過外鍵關(guān)聯(lián)實(shí)現(xiàn)的連接查詢,但不建議使用這種方式,HQL的連接查詢可以通過配置兩個(gè)類或多個(gè)類之間的關(guān)聯(lián)映射關(guān)系來實(shí)現(xiàn)多表連接查詢。Hibernate查詢語言分頁分頁查詢是數(shù)據(jù)庫開發(fā)中常用的操作,對于JDBC數(shù)據(jù)庫編程來說,不同的數(shù)據(jù)庫的分頁查詢語句是不同的。例如,Oracle數(shù)據(jù)庫需要使用rownum關(guān)鍵字,MySQL數(shù)據(jù)庫需要使用limit關(guān)鍵字,而SQLServer數(shù)據(jù)庫需要使用top關(guān)鍵字,Hibernate對JDBC數(shù)據(jù)庫進(jìn)行了封裝,在分頁操作上實(shí)現(xiàn)了統(tǒng)一。Hibernate的Query接口提供了兩個(gè)方法以實(shí)現(xiàn)分頁:setFirstResuit(int)設(shè)置第一條記錄開始的位置,setMaxResults(int)設(shè)置返回的紀(jì)錄總條數(shù)。Hibernate查詢語言匯總HQL支持在查詢的屬性上使用匯總函數(shù)。這些匯總函數(shù)有:計(jì)算查詢的屬性的平均值函數(shù)avg(),計(jì)算查詢的屬性的總和函數(shù)sum(),返回查詢的屬性的最小值函數(shù)min(),返回查詢的屬性的最大值函數(shù)max(),統(tǒng)計(jì)查詢對象的數(shù)量函數(shù)count()o通過Query接口的uniqueResult()函數(shù)來獲得匯總函數(shù)的值。下面以計(jì)算員工表中記錄總數(shù)為例進(jìn)行舉例說明。Hibernate查詢語言03原生SQL查詢0102031.類JDBC方式該方式是通過調(diào)用Session接口的connectionO方法,從而獲得數(shù)據(jù)庫連接,進(jìn)而通過JDBC方式來實(shí)現(xiàn)對數(shù)據(jù)庫的查詢。例如,對Oracle存儲過程的操作就可以使用這種方式。2.命名SQL查詢Hibernate使用<sql-query.../>元素來配置命名SQL查詢,配置<sql-query.../>元素有一個(gè)必填的name屬性,該屬性用于指定該命名SQL査詢的名稱。3.通過Session接口的createSqlQuery()方法對于一般的SQL語句,使用Session接口的createSqlQuery()方法來調(diào)用原生SQL語句是最簡單的一種方式。使用該方法時(shí),可以結(jié)合addEntityO方法來使用,這樣可以返回對象列表。Hibernate查詢語言程序說明:通過session.connection()方法建立數(shù)據(jù)庫連接,接下來的操作就和JDBC方式完全一樣了。因?yàn)镺racle數(shù)據(jù)庫的存儲過程的創(chuàng)建和MySQL等其他數(shù)據(jù)庫不同,對Oracle存儲過程的操作一般要釆用類JDBC方式。Hibernate查詢語言在使用<sql-query.../>元素定義命名查詢時(shí),可以包含如下幾個(gè)元素。(1)<retum.../>:將查詢結(jié)果轉(zhuǎn)換成持久化實(shí)體。(2)〈return-join.../>:預(yù)加載持久化實(shí)體的關(guān)聯(lián)實(shí)體。(3)〈return-scalar.../>:將查詢的數(shù)據(jù)列轉(zhuǎn)換成標(biāo)量值。Hibernate查詢語言Hibernate查詢語言04項(xiàng)目案例在線書城項(xiàng)目的主要功能模塊可完成如下功能:瀏覽圖書類別,瀏覽圖書信息,瀏覽圖書明細(xì)信息,瀏覽圖書庫存信息及圖片,添加到購物車,查詢圖書信息,結(jié)賬,確認(rèn)付費(fèi)細(xì)節(jié)及郵寄地址等。在這些功能中,大部分業(yè)務(wù)都是查詢業(yè)務(wù)。在本章項(xiàng)目案例中,將在數(shù)據(jù)持久層對瀏覽圖書信息、瀏覽圖書明細(xì)信息、查詢圖書信息功能以HQL查詢的方式加以實(shí)現(xiàn)。其中,瀏覽圖書信息是對Product表的單表查詢,瀏覽圖書明細(xì)信息需要使用Product表和Item表的連接查詢;查詢圖書信息則需要使用分頁查詢及匯總函數(shù)功能。另外,因?yàn)樾枰U铣绦蚣軜?gòu)的完整性,以及需要為下面章節(jié)項(xiàng)目案例進(jìn)行一些準(zhǔn)備工作,所以本章除完成數(shù)據(jù)持久層的工作外,還要引入業(yè)務(wù)層并編寫相關(guān)功能的業(yè)務(wù)層的代碼。Hibernate查詢語言1.數(shù)據(jù)持久層數(shù)據(jù)持久層是使用Dao模式來完成的,Dao模式的BaseDao可以參考第3章的項(xiàng)目案例,Dao模式中的實(shí)體類及映射文件可以參考第4章的項(xiàng)目案例,本章的數(shù)據(jù)持久層只需完成Dao接口和Dao接口實(shí)現(xiàn)類。1)瀏覽圖書信息功能及查詢圖書信息功能瀏覽圖書信息功能主要是對Product表的操作,該功能主要是通過“圖書類別”來瀏覽圖書信息的;而查詢圖書信息功能也是對Product表的操作,該功能主要根據(jù)“圖書描述,來查詢相關(guān)的圖書,并實(shí)現(xiàn)分頁瀏覽。因此,這兩個(gè)功能的接口函數(shù)都可以寫在接口ProductDao中。Hibernate查詢語言Hibernate查詢語言2)瀏覽圖書明細(xì)信息功能實(shí)現(xiàn)該功能主要通過“圖書編號”查找圖書明細(xì)信息。涉及的表有Product表和Item表,需要對這兩個(gè)表進(jìn)行關(guān)聯(lián)查詢。在Hibernate部分,只要配置好這兩個(gè)表的關(guān)聯(lián)映射關(guān)系,關(guān)聯(lián)查詢就是一件非常簡單的工作了,我們選定Item表對應(yīng)的Item類作為“主”的一方,從Item類進(jìn)行查詢。Hibernate查詢語言2.業(yè)務(wù)層Hibernate主要完成數(shù)據(jù)持久層的工作,因?yàn)樵谙乱徽轮薪榻B表示層的內(nèi)容,并且在三層架構(gòu)中表示層調(diào)用業(yè)務(wù)層,業(yè)務(wù)層調(diào)用數(shù)據(jù)持久層,層和層之間是單向的調(diào)用關(guān)系,所以為了后續(xù)章節(jié)介紹方便,在本章的項(xiàng)目案例中將實(shí)現(xiàn)相關(guān)功能的業(yè)務(wù)層代碼的編寫。Hibernate查詢語言Hibernate查詢語言Hibernate查詢語言程序說明:因?yàn)樵跇I(yè)務(wù)層實(shí)現(xiàn)類中是通過調(diào)用數(shù)據(jù)持久層的方法來實(shí)現(xiàn)相關(guān)功能的,而在測試類的測試方法中是通過調(diào)用業(yè)務(wù)層的方法來實(shí)現(xiàn)測試的,所以測試類在這里充當(dāng)?shù)氖潜硎緦拥慕巧?。在本章的?xiàng)目案例中,通過程序代碼展現(xiàn)了三層架構(gòu)的一般特點(diǎn),即表示層調(diào)用業(yè)務(wù)層、業(yè)務(wù)層調(diào)用數(shù)據(jù)持久層,層和層之間是單向的調(diào)用關(guān)系。Hibernate查詢語言5.4.3知識點(diǎn)總結(jié)在本章的項(xiàng)目案例中,運(yùn)用本章的重點(diǎn)知識HQL實(shí)現(xiàn)了瀏覽圖書信息、瀏覽圖書明細(xì)信息、查詢圖書信息功能的數(shù)據(jù)持久層。在本案例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技助力下的家庭防災(zāi)減災(zāi)知識普及研究
- 科技輔助下的小學(xué)生語文學(xué)習(xí)習(xí)慣養(yǎng)成
- 2025年鉛酸蓄電池極板項(xiàng)目可行性研究報(bào)告
- 設(shè)計(jì)思維與方法論的培訓(xùn)與實(shí)踐
- 科技政策與學(xué)術(shù)研究的相互關(guān)系
- 2025年摩托車裝飾底座項(xiàng)目可行性研究報(bào)告
- 情感教育在科技創(chuàng)新中的推動作用匯報(bào)
- 2025至2030年重錘物位計(jì)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年球磨機(jī)械板項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年有機(jī)玻璃紅酒架項(xiàng)目投資價(jià)值分析報(bào)告
- AQ6111-2023個(gè)體防護(hù)裝備安全管理規(guī)范
- 中國血管通路專家共識解讀
- 開學(xué)前幼兒園安全培訓(xùn)
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- 中國紅十字會救護(hù)員培訓(xùn)理論考試試題及答案
- 《建設(shè)工程監(jiān)理》課件
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標(biāo))
- 中層領(lǐng)導(dǎo)的高績效管理
- 小小銀行家-兒童銀行知識、理財(cái)知識培訓(xùn)
- 閱讀理解特訓(xùn)卷-英語四年級上冊譯林版三起含答案
- 國庫集中支付培訓(xùn)班資料-國庫集中支付制度及業(yè)務(wù)操作教學(xué)課件
評論
0/150
提交評論