版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Hibernate高級(jí)特性本章目標(biāo)了解Hibernate檢索策略掌握Hibernate延遲加載了解Hibernate緩存機(jī)制掌握Hibernate緩存配置方式本章簡(jiǎn)介在前面的內(nèi)容中,我們探討了Hibernate的基礎(chǔ)使用技術(shù)。通過(guò)對(duì)這些基礎(chǔ)技術(shù)的把握,我們即可開(kāi)始進(jìn)行基于Hibernate的持久層開(kāi)發(fā)。然而,在這些應(yīng)用技術(shù)之后,存在著怎樣的運(yùn)行機(jī)制以及其內(nèi)部實(shí)現(xiàn)方式對(duì)應(yīng)用層可能產(chǎn)生怎樣的影響,則是我們下面需要關(guān)注的問(wèn)題。類級(jí)別檢索策略和關(guān)聯(lián)級(jí)別檢索策略類級(jí)別檢索策略又分為立即檢索和延遲檢索兩類,默認(rèn)的檢索策略是立即檢索。在Hibernate映射文件中,通過(guò)在<class>上配置lazy屬性來(lái)確定檢索策略。對(duì)于Session的檢索方式,類級(jí)別檢索策略僅適用于load()方法,也就說(shuō),對(duì)于get檢索和query檢索,持久化對(duì)象都會(huì)被立即加載而不管lazy的值是false還是true。一般來(lái)說(shuō),我們檢索對(duì)象就是要訪問(wèn)它,因此立即檢索是通常的選擇。由于load()方法在檢索不到對(duì)象時(shí)會(huì)拋出異常(立即檢索的情況下),因此編者不建議使用load檢索。而且,由于<class>中的lazy屬性還影響到多對(duì)一及一對(duì)一的檢索策略,因此使用load方法就更沒(méi)必要了。一對(duì)多和多對(duì)多關(guān)聯(lián)關(guān)系一般使用<set>節(jié)點(diǎn)配置。<set>節(jié)點(diǎn)中有l(wèi)azy和outer-join屬性,它們的不同取值絕定了不同的檢索策略。立即檢索:這是一對(duì)多默認(rèn)的檢索策略,此時(shí)<set>節(jié)點(diǎn)的“l(fā)azy=false”,“outer-join=false”。盡管這是默認(rèn)的檢索策略,但如果關(guān)聯(lián)的集合是無(wú)用的,那么就不要使用這種檢索方式。延遲檢索:此時(shí)“l(fā)azy=true”,“outer-join=false”(outer-join=true是無(wú)意義的),這是優(yōu)先考慮的檢索方式。迫切左外連接檢索:此時(shí)“l(fā)azy=false”,“outer-join=true”,這種檢索策略只適用于依靠id檢索方式(例如load、get),而不適用于query的集合檢索(query檢索會(huì)采用立即檢索策略)。相比于立即檢索,這種檢索策略減少了一條sql語(yǔ)句,但在Hibernate中,只能有一個(gè)<set>節(jié)點(diǎn)配置成“outer-join=true”。多對(duì)一和一對(duì)一檢索策略一般使用<many-to-one>、<one-to-one>節(jié)點(diǎn)配置。<many-to-one>中需要配置的屬性是outer-join,同時(shí)還需要配置one端關(guān)聯(lián)的<class>節(jié)點(diǎn)的lazy屬性(注意:配置的不是<many-to-one>中的lazy哦),它們的組合后的檢索策略如下:<many-to-one>中的“outer-join=auto”:這是默認(rèn)值,如果one端關(guān)聯(lián)的<class>的“l(fā)azy=true”則為延遲檢索,如果one端關(guān)聯(lián)的<class>的“l(fā)azy=false”則為迫切左外連接檢索。<many-to-one>中的“outer-join=true”:無(wú)關(guān)于one端關(guān)聯(lián)的<class>的lazy屬性,都為迫切左外連接檢索。<many-to-one>中的“outer-join=false”:如果one端關(guān)聯(lián)的<class>的“l(fā)azy=true”則為延遲檢索,否則即為立即檢索。Hibernate延遲加載機(jī)制
實(shí)體對(duì)象的延遲加載集合類型的延遲加載什么是Hibernate緩存緩存是位于應(yīng)用程序與物理數(shù)據(jù)源之間,用于臨時(shí)存放復(fù)制數(shù)據(jù)的內(nèi)存區(qū)域,其目的是為了減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問(wèn)的次數(shù),從而提高應(yīng)用程序的運(yùn)行性能。Hibernate是一個(gè)持久層框架,經(jīng)常訪問(wèn)物理數(shù)據(jù)庫(kù),為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問(wèn)的頻次,Hibernate緩存內(nèi)的數(shù)據(jù)是對(duì)物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)用程序在運(yùn)行時(shí)從緩存讀寫(xiě)數(shù)據(jù),在特定的時(shí)刻或事件會(huì)同步緩存和物理數(shù)據(jù)源的數(shù)據(jù),從而提高應(yīng)用程序的運(yùn)行性能。Hibernate在查詢數(shù)據(jù)時(shí),首先到緩存中去查找,如果找到就直接使用,找不到的時(shí)候就會(huì)從物理數(shù)據(jù)源中檢索,所以,把頻繁使用的數(shù)據(jù)加載到緩存區(qū)后,就可以大大減少應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源的訪問(wèn),使得程序的運(yùn)行性能明顯的提升。Hibernate緩存的分類
Hibernate緩存包括兩大類:Hibernate一級(jí)緩存和Hibernate二級(jí)緩存。Hibernate一級(jí)緩存又稱為“session的緩存”,它是內(nèi)置的,不能被卸載(不能被卸載的意思就是這種緩存不具有可選性,必須有的功能,不可以取消session緩存)。Hibernate二級(jí)緩存又稱為“SessionFactory的緩存”,由于SessionFactory對(duì)象的生命周期和應(yīng)用程序的整個(gè)過(guò)程對(duì)應(yīng),因此Hibernate二級(jí)緩存是進(jìn)程范圍或者集群范圍的緩存,有可能出現(xiàn)并發(fā)問(wèn)題,因此需要采用適當(dāng)?shù)牟l(fā)訪問(wèn)策略,該策略為被緩存的數(shù)據(jù)提供了事務(wù)隔離級(jí)別。Hibernate的緩存管理一級(jí)緩存的管理Session中提供了如下幾個(gè)方法對(duì)一級(jí)緩存進(jìn)行管理:evit(Objectobj):將指定的持久化對(duì)象從一級(jí)緩存中清除,釋放對(duì)象所占用的內(nèi)存資源,指定對(duì)象從持久化狀態(tài)變?yōu)槊摴軤顟B(tài),從而成為游離對(duì)象。Clear():將一級(jí)緩存中的所有持久化對(duì)象清除,釋放其占用的內(nèi)存資源。Contains(Objectobj):判斷指定的對(duì)象是否存在于一級(jí)緩存中。flush():刷新一級(jí)緩存區(qū)的內(nèi)容,使之與數(shù)據(jù)庫(kù)數(shù)據(jù)保持同步。二級(jí)緩存的管理SessionFactory中提供了如下方法對(duì)二級(jí)緩存進(jìn)行管理:Evict(Classarg0,Serializablearg1):將某個(gè)類的指定ID的持久化對(duì)象從二級(jí)緩存中清除,釋放對(duì)象所占用的資源。Hibernate的二級(jí)緩存的配置Hibernate的二級(jí)緩存功能是靠配置二級(jí)緩存插件來(lái)實(shí)現(xiàn)的,為了集成這些插件,Hibernate提供了org.hibernate.cache.CacheProvider接口,它充當(dāng)緩存插件與Hibernate之間的適配器。EHCacheorg.hibernate.cache.EhCacheProviderOSCacheorg.hibernate.cache.OSCacheProviderSwarmCaheorg.hibernate.cache.SwarmCacheProviderJBossCacheorg.hibernate.cache.TreeCacheProviderHibernate的二級(jí)緩存策略的一般過(guò)程如下:條件查詢的時(shí)候,總是發(fā)出一條類似“select*fromtable_namewhere……”(選擇所有字段)這樣的SQL語(yǔ)句查詢數(shù)據(jù)庫(kù),一次獲得所有的數(shù)據(jù)對(duì)象。把獲得的所有數(shù)據(jù)對(duì)象根據(jù)ID放入到第二級(jí)緩存中。當(dāng)Hibernate根據(jù)ID訪問(wèn)數(shù)據(jù)對(duì)象的時(shí)候,首先從Session一級(jí)緩存中查;查不到,如果配置了二級(jí)緩存,那么從二級(jí)緩存中查;查不到,再查詢數(shù)據(jù)庫(kù),把結(jié)果按照ID放入到緩存。刪除、更新、增加數(shù)據(jù)的時(shí)候,同時(shí)更新緩存。Hibernate的二級(jí)緩存策略,是針對(duì)于ID查詢的緩存策略,對(duì)于條件查詢則毫無(wú)作用。為此,Hibernate提供了針對(duì)條件查詢的Query緩存。使用Hibernate實(shí)現(xiàn)數(shù)據(jù)的刪改與修改類似,刪除時(shí)也需要先加載數(shù)據(jù)。在使用Hibernate編寫(xiě)持久化代碼時(shí),不需要再有數(shù)據(jù)庫(kù)表、字段等概念。根據(jù)面向?qū)ο蟮恼Z(yǔ)義,刪除操作方法的參數(shù)理所當(dāng)然是將要?jiǎng)h除的對(duì)象,而不是主鍵。以面向?qū)ο蟮乃季S編寫(xiě)代碼是Hibernate持久化操作接口設(shè)計(jì)的一個(gè)理念。Hibernate的Query緩存策略的過(guò)程如下Hibernate首先根據(jù)這些信息組成一個(gè)QueryKey,QueryKey包括條件查詢的請(qǐng)求一般信息:SQL,SQL需要的參數(shù),記錄范圍(起始位置rowStart,最大記錄個(gè)數(shù)maxRows),等。Hibernate根據(jù)這個(gè)QueryKey到Query緩存中查找對(duì)應(yīng)的結(jié)果列表。如果存在,那么返回這個(gè)結(jié)果列表;如果不存在,查詢數(shù)據(jù)庫(kù),獲取結(jié)果列表,把整個(gè)結(jié)果列表根據(jù)QueryKey放入到Query緩存中。QueryKey中的SQL涉及一些表名,如果這些表的任何數(shù)據(jù)發(fā)生修改、刪除、增加等操作,這些相關(guān)的QueryKey都要從緩存
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)冰箱行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)美容培訓(xùn)行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 建設(shè)施工過(guò)程職業(yè)病危害防治總結(jié)報(bào)告
- 肇慶市中小學(xué)教學(xué)質(zhì)量評(píng)估2012屆高中畢業(yè)班第二次模擬試題數(shù)學(xué)(理)
- 浙江中乾計(jì)量校準(zhǔn)有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 軟件評(píng)估報(bào)告范例怎么寫(xiě)
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 年產(chǎn)毛竹纖維粉生物基可降解材料項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 年產(chǎn)15萬(wàn)噸(折百)稀硝酸及10萬(wàn)噸濃硝酸項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 二零二五年度技術(shù)服務(wù)合同標(biāo)的和技術(shù)要求
- 2024年黑龍江省《輔警招聘考試必刷500題》考試題庫(kù)附答案(滿分必刷)
- 2025年初級(jí)會(huì)計(jì)職稱《經(jīng)濟(jì)法基礎(chǔ)》全真模擬及答案(解析3套)
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年五年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- 河北省石家莊市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 國(guó)家八年級(jí)數(shù)學(xué)質(zhì)量測(cè)試題(六套)
- 人教版小學(xué)1-6年級(jí)日積月累(全)
- 盤扣式腳手架(內(nèi)部培訓(xùn))(課堂PPT)
- 袖閥管注漿工法
- 設(shè)計(jì)說(shuō)明書(shū)——曲柄連桿機(jī)構(gòu)
- 3勞務(wù)分包商動(dòng)態(tài)評(píng)價(jià)管理制度
- 市場(chǎng)發(fā)展部崗位職責(zé)
評(píng)論
0/150
提交評(píng)論