韓順平hibernate3.3視頻教程筆記.源碼匯總第5day_第1頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第5day_第2頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第5day_第3頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第5day_第4頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第5day_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

1、是目前 web 編程第一語言,歡迎詳情查看 htt韓順平老師力作,1.懶加載是什么? 為什么需要懶加載?2.如何解決懶加載問題為什么需要緩存?看一個(gè)案例:-原理圖從上圖看出: 當(dāng)去查詢對象的時(shí)候,首先到一級(jí)緩存去取數(shù)據(jù),如果有,則不到數(shù)據(jù)庫中取,如果沒有則到數(shù)據(jù)庫中取,同時(shí)在一級(jí)緩存中放入對象.一級(jí)緩存的細(xì)節(jié) 什么操作會(huì)向一級(jí)緩存放入數(shù)據(jù)save,update,saveOrUpda save 案例:/添加一個(gè)學(xué)生oad,get,list,iteraockStudent student=new Student();student.setName();s.save(student);/放入一級(jí)緩存

2、/我馬上查詢Student stu2=(Student) s.get(Student.class, student.getId(); /select System.out.prln(你剛剛加入的學(xué)生名字是+stu2.getName(); 什么操作會(huì)從一級(jí)緩存取數(shù)據(jù).get / load / listget / load 會(huì)首先從一級(jí)緩存中取,如沒有.再有不同的操作get 會(huì)立即向數(shù)據(jù)庫發(fā)請求,而load 會(huì)返回一個(gè)?list 會(huì)不會(huì)從 ses案例:/查詢 45 號(hào)學(xué)生對象,直到用戶真的去使用數(shù)據(jù),才會(huì)向數(shù)據(jù)庫發(fā)請求緩存取數(shù)據(jù)?Student stu=(Student) s.get(Studen

3、t.class, 45);System.out.prln(|);String hql=from Student where id=45;Student stu2=(Student) s.createQuery(hql).uniqueResult();System.out.prln(stu2.getName();從上面的案例,我看出 query.list() query.uniueResut() 不會(huì)從一級(jí)緩取數(shù)據(jù)! 但是 query.list或者 query.uniqueRestu() 會(huì)向一級(jí)緩存放數(shù)據(jù)的. 一級(jí)緩存不需要配置,就可以使用,它本身沒有保護(hù)機(jī)制,所以程序員要考慮這個(gè)問題,可以同

4、 evict 或者 clear 來清除 ses緩存中對象. evict 是清除一個(gè)對象,clear是清除所有的 se緩存對象 ses級(jí)緩存中對象的生命周期, 當(dāng) ses關(guān)閉后,就自動(dòng)銷毀.自己用HashMap 來模擬一個(gè) Ses緩存,加深對緩存的深入.package com.hsp.view;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyCache /使用 map 來模擬緩存sic Map maps=new Has

5、hMap();public sic void main(String args) / TODO Auto-generated method stubgetStudent(1); getStudent(1); getStudent(1); getStudent(1); getStudent(3);getStudent(3);public sic Student getStudent(eger id)/s.get()/先到緩存去 if(maps.containsKey(id)/在緩存有System.out.prln(從緩存取出); return maps.get(id);elseSystem.ou

6、t.prln(從數(shù)據(jù)庫中取);/到數(shù)據(jù)庫取Student stu=MyDB.getStudentFromDB(id);/放入緩存 maps.put(id, stu); return stu;/數(shù)據(jù)庫class MyDBsic List lists=newArrayList();/初始化數(shù)據(jù)庫,假設(shè)有三個(gè)學(xué)生 sicStudent s1=new Student(); s1.setId(1); s1.setName(aaa); Student s2=new Student(); s2.setId(2); s2.setName(bbb); Student s3=new Student(); s3.s

7、etId(3); s3.setName(ccc); lists.add(s1);lists.add(s2);lists.add(s3);public sic Student getStudentFromDB( for(Student s: lists)if(s.getId().equals(id) return s;return null;/ 在數(shù)據(jù)庫中沒有.eger id)class Studentprivateeger id;private String name;publiceger getId() return id;public void setId(eger id) this.id

8、 = id;public String getName() return name;public void setName(String name) = name;為什么需要二級(jí)緩存?因?yàn)橐患?jí)緩存有限(生命周期短),所以題需要二級(jí)緩存(SesFactory 緩存)來彌補(bǔ)這個(gè)問1.2.3.需要配置二級(jí)緩存是交給第二級(jí)緩存的原理去處理,常見的Hashtable , OSCache , EHCache4.二級(jí)緩存的對象可能放在內(nèi)存,也可能放在磁盤.快速入門案例使用 OsCache 來演示二級(jí)緩存的使用.1.配置二級(jí)緩存對配置說明:updatetrue.hibernate.cach

9、e.OSCacheProvidermap/Student.hbm.xml /2. 可以文件放在 src 目錄下,這樣你可以指定放入二級(jí)緩存的對象capacity 大小. 默認(rèn) 10003 使用/ TODO Auto-generated method stub/通過獲取一個(gè) se,讓 hibernate 框架運(yùn)行(config-加載 hibernate.cfg.xml)SesTrans=null;ion tx=null;try /使用基礎(chǔ)模板來講解.s=HibernateUtil.openSes();tx=s.begranion();/查詢 45 號(hào)學(xué)生Student stu1=(Student

10、) s.get(Student.class, 45);/45-一級(jí)緩存System.out.prln(stu1.getName();mit(); catch (Exception e) e.prStackTrace(); if(tx!=null)tx.rollback();finallyif(s!=null & s.isOpen() s.close();System.out.prln(*);try /使用基礎(chǔ)模板來講解.s=HibernateUtil.openSes();tx=s.begranion();/查詢 45 號(hào)學(xué)生Student stu1=(Student) s.get(Studen

11、t.class, 45);System.out.prln(stu1.getName();Student stu3=(Student) s.get(Student.class, 46);System.out.prln(stu3.getName();mit(); catch (Exception e) e.prStackTrace(); if(tx!=null)tx.rollback();finallyif(s!=null & s.isOpen() s.close();/完成一個(gè)統(tǒng)計(jì),統(tǒng)計(jì)的信息在 Sessfactory/SesFactory 對象.Sistics sistics= Hiberna

12、teUtil.getSesFactory().getSistics();System.out.pr System.out.pr System.out.prSystem.out.prln(sistics); ln(放入+sln(命中+sln(錯(cuò)過+sistics.getSecondLevelCachePount();istics.getSecondLevelCacheHitCount();istics.getSecondLevelCacheMissCount();3. 在配置了二級(jí)緩存后,請大家要注意可以通過 Sistics,查看你的配置高不高主鍵增長策略 increment自增,每次增長 1,

13、 適用于所有數(shù)據(jù)庫. 但是不要使用在多進(jìn)程,主鍵類型是數(shù)值型select max(id) from Student identity自增,每次增長 1, 適用于支持 identity 的數(shù)據(jù)(數(shù)值 sequence native會(huì)根據(jù)數(shù)據(jù)類型來選擇,使用 identity,sequence,sql server), 主鍵類型是,hiloselect hibernate_sequence.nextval from dual主鍵類型是數(shù)值 long , short ,id name=id type=java.lang. hiloegerhilo 標(biāo)識(shí)符用法:由 Hibernate 按照一種 hig

14、h/low 算法生成標(biāo)識(shí)符id name=”id” type=”java.lang.eger” column=”ID”my_hi_valuenext_value uuid會(huì)根據(jù) uuid 算法,生成 128-bit 的字串主鍵屬性類型不能是數(shù)值型,而是字串型 assigned用戶自己設(shè)置主鍵值,所以主鍵屬性類型可以是數(shù)值,字串在復(fù)合主鍵foreignone-to-one 的關(guān)系中,有另一張表的主鍵() 來決定 自己主鍵/ 外鍵( IdCard)給出一個(gè)簡單原則:針對 oracle 主鍵是 uuid 或者 assinged/long/short 建議使用sequence 主鍵是 String 使用針對主鍵是/long/short 建議使用 increment/assigend ,如果是字串 UUId/assigned針 對 主 鍵 是/long/shor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論