SSH企業(yè)培訓(xùn)之?dāng)?shù)據(jù)抓取策略與高速緩存ppt課件_第1頁
SSH企業(yè)培訓(xùn)之?dāng)?shù)據(jù)抓取策略與高速緩存ppt課件_第2頁
SSH企業(yè)培訓(xùn)之?dāng)?shù)據(jù)抓取策略與高速緩存ppt課件_第3頁
SSH企業(yè)培訓(xùn)之?dāng)?shù)據(jù)抓取策略與高速緩存ppt課件_第4頁
SSH企業(yè)培訓(xùn)之?dāng)?shù)據(jù)抓取策略與高速緩存ppt課件_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)抓取策略與高速緩存數(shù)據(jù)抓取策略與高速緩存 引見引見講授:講授:劉曉濤劉曉濤:lxt008163Blog:.csdn/liuxiaotao008MSN:lxt008live數(shù)據(jù)加載策略與優(yōu)化。數(shù)據(jù)加載策略與優(yōu)化。高速緩存討論高速緩存討論(含批量處理含批量處理)。對象同一性。對象同一性。復(fù)合主鍵。復(fù)合主鍵。觸發(fā)器觸發(fā)器/數(shù)據(jù)庫生成值的處理。數(shù)據(jù)庫生成值的處理。計算列的處理。計算列的處理。本章目標本章目標數(shù)據(jù)加載策略與優(yōu)化數(shù)據(jù)加載策略與優(yōu)化延遲加載延遲加載加載代理加載代理(往往是往往是ID),真正用到數(shù)據(jù)時才加載關(guān)聯(lián)數(shù)據(jù)。,真正用到數(shù)據(jù)時才加載關(guān)聯(lián)數(shù)據(jù)。lazy=“true”,默認值。默認值。即

2、時加載即時加載一條一條SQL語句連接查詢語句連接查詢,fetch=“join”。兩條兩條SQL語句單獨查詢語句單獨查詢,fetch=“select”。批量加載批量加載設(shè)置設(shè)置batch-size屬性。屬性。Hibernate抓取策略抓取策略1.保持默認,同保持默認,同fetch=select,如:如:fetch=select,另外發(fā)送一條另外發(fā)送一條select語句抓取當(dāng)前對象關(guān)聯(lián)實體或集合語句抓取當(dāng)前對象關(guān)聯(lián)實體或集合2.設(shè)置設(shè)置fetch=join,如:如:fetch=join,hibernate會通過會通過select語句使用外連接來加載其關(guān)聯(lián)實體或集合語句使用外連接來加載其關(guān)聯(lián)實體或集

3、合此時此時lazy會失效會失效3.保持默認,同保持默認,同fetch=select,如:如:fetch=select,另外發(fā)送一條另外發(fā)送一條select語句抓取當(dāng)前對象關(guān)聯(lián)實體或集合語句抓取當(dāng)前對象關(guān)聯(lián)實體或集合4.設(shè)置設(shè)置fetch=join,如:如:fetch=join,hibernate會通過會通過select語句使用外連接來加載其關(guān)聯(lián)實體或集合語句使用外連接來加載其關(guān)聯(lián)實體或集合此時此時lazy會失效會失效Hibernate抓取策略抓取策略5.設(shè)置設(shè)置fetch=subselect,如:如:fetch=“subselect”,另外發(fā)送一條另外發(fā)送一條select語句抓取在前面查詢到的

4、所有語句抓取在前面查詢到的所有實體對象的關(guān)聯(lián)集合實體對象的關(guān)聯(lián)集合,合適的時候使用子查詢。合適的時候使用子查詢。6.batch-szie在在上的應(yīng)用上的應(yīng)用batch-size屬性,可以批量加載實體類,參見:屬性,可以批量加載實體類,參見:Classes.hbm.xml7.batch-szie在集合上的應(yīng)用在集合上的應(yīng)用batch-size屬性,可以批量加載實體類,參見:屬性,可以批量加載實體類,參見:Classes.hbm.xmlhibernate一級緩存一級緩存一級緩存和一級緩存和session的生命周期一致的生命周期一致下面方法支持一級緩存:下面方法支持一級緩存:get()load()i

5、terate緩存實體對象而不是屬性)緩存實體對象而不是屬性)如何管理一級緩存:如何管理一級緩存:session.clear()session.evict()如何避免一次性大量的實體數(shù)據(jù)入庫導(dǎo)致內(nèi)存溢出如何避免一次性大量的實體數(shù)據(jù)入庫導(dǎo)致內(nèi)存溢出先先flush,再,再clear如果數(shù)據(jù)量特別大,考慮采用如果數(shù)據(jù)量特別大,考慮采用jdbc實現(xiàn),如果實現(xiàn),如果jdbc也不能滿足要求可也不能滿足要求可以考慮采用數(shù)據(jù)本身的特定導(dǎo)入工具。以考慮采用數(shù)據(jù)本身的特定導(dǎo)入工具。hibernate二級緩存二級緩存也稱為進程級的緩存或也稱為進程級的緩存或SessionFactory級緩存,可以被所有的級緩存,可以被

6、所有的session共享共享二級緩存的生命周期和二級緩存的生命周期和SessionFactory的生命周期一致。的生命周期一致。二級緩存的配置和使用:二級緩存的配置和使用:將將echcache.xml文件拷貝到文件拷貝到src下下開啟二級緩存,修改開啟二級緩存,修改hibernate.cfg.xml文件文件true指定緩存產(chǎn)品提供商,修改指定緩存產(chǎn)品提供商,修改hibernate.cfg.xml文件文件org.hibernate.cache.EhCacheProvider指定那些實體類使用二級緩存兩種方法)指定那些實體類使用二級緩存兩種方法)在映射文件中采用在映射文件中采用標簽標簽在在hibe

7、rnate.cfg.xml文件中,采用文件中,采用標簽標簽二級緩存是緩存實體對象的二級緩存是緩存實體對象的對象同一性對象同一性同一性概念同一性概念數(shù)據(jù)庫中一條記錄在內(nèi)存中應(yīng)該只有一種表示。數(shù)據(jù)庫中一條記錄在內(nèi)存中應(yīng)該只有一種表示。同一性級別同一性級別事務(wù)事務(wù)(session)級別。級別。過程過程(SessionFactory)級別多個級別多個session中保證同一性)。中保證同一性)。JVM級別。級別。分布式系統(tǒng)級別。分布式系統(tǒng)級別。Hibernate保證事務(wù)保證事務(wù)(session)級別的實體對象的同一性。其他級別的實體對象的同一性。其他級別不保證。級別不保證。復(fù)合主鍵類需要覆蓋復(fù)合主鍵類

8、需要覆蓋hashCode()和和equals()方法以保證對象的方法以保證對象的同一性。同一性。復(fù)合主鍵映射復(fù)合主鍵映射設(shè)計決策設(shè)計決策表最好加入一個與業(yè)務(wù)無關(guān)的列作為主鍵。表最好加入一個與業(yè)務(wù)無關(guān)的列作為主鍵。最好不使用自然鍵最好不使用自然鍵(如如User使用使用 user_name 作為主鍵作為主鍵),因為業(yè)務(wù)需求發(fā)生變化是很難重構(gòu)數(shù)據(jù)模型。因為業(yè)務(wù)需求發(fā)生變化是很難重構(gòu)數(shù)據(jù)模型。遺留數(shù)據(jù)庫可能用兩個或以上的列作為復(fù)合主鍵。遺留數(shù)據(jù)庫可能用兩個或以上的列作為復(fù)合主鍵。通常將復(fù)合主鍵相關(guān)的屬性,單獨放到一個主鍵類中通常將復(fù)合主鍵相關(guān)的屬性,單獨放到一個主鍵類中主鍵類必須實現(xiàn)序列化接口主鍵類必

9、須實現(xiàn)序列化接口(implements Serializable)。需要覆蓋需要覆蓋hashCode()和和equals()方法以保證對象的同一方法以保證對象的同一性。性。案例案例public class FiscalYearPeriod private FiscalYearPeriodPK fiscalYearPeriodPK;private Date beginDate;private Date endDate;/getXxx()/setXxx() 主鍵類主鍵類public class FiscalYearPeriodPK implements Serializable private i

10、nt fiscalYear; /核算年核算年private int fiscalPeriod; /核算月核算月/getXxx()/setXxx()覆蓋覆蓋hashCode()方法方法hashCode(給對象產(chǎn)生給對象產(chǎn)生OID)。Overridepublic int hashCode() final int prime = 31;int result = 1;result = prime * result + fiscalPeriod;result = prime * result + fiscalYear;return result;覆蓋覆蓋equals()方法方法Overridepubli

11、c boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;if (fiscalPeriod != other.fiscalPeriod) return false; if (fiscalYear != other.fiscalYear) return false; ret

12、urn true;映射文件映射文件 save()session.beginTransaction(); FiscalYearPeriod fiscalYearPeriod = new FiscalYearPeriod();FiscalYearPeriodPK pk = new FiscalYearPeriodPK();pk.setFiscalYear(2021);pk.setFiscalPeriod(3);fiscalYearPeriod.setFiscalYearPeriodPK(pk); fiscalYearPeriod.setBeginDate(new Date(); fiscalYea

13、rPeriod.setEndDate(new Date(); session.save(fiscalYearPeriod); session.getTransaction()mit(); load()session.beginTransaction();FiscalYearPeriodPK pk = new FiscalYearPeriodPK();pk.setFiscalYear(2021);pk.setFiscalPeriod(3);FiscalYearPeriod fiscalYearPeriod = (FiscalYearPeriod)session.load(FiscalYearPe

14、riod.class, pk); System.out.println(fiscalYearPeriod.getPeriodSts(); session.getTransaction()mit();數(shù)據(jù)庫生成值的處理數(shù)據(jù)庫生成值的處理*update=“false” insert=“false該列不會出現(xiàn)在該列不會出現(xiàn)在insert/update語句中,是只讀的。語句中,是只讀的。* generated:立即執(zhí)行一個:立即執(zhí)行一個select獲取數(shù)據(jù)庫生成的獲取數(shù)據(jù)庫生成的值值觸發(fā)器觸發(fā)器如果沒有設(shè)置如果沒有設(shè)置generated=“” ,就需要顯式地再查詢:,就需要顯式地再查詢:session.save(object);session.flush();session.refresh(object);/獲取觸

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論