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

下載本文檔

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

文檔簡(jiǎn)介

1、是目前 web 編程第一語(yǔ)言,歡迎詳情查看 htt韓順平老師力作,1.懶加載是什么? 為什么需要懶加載?2.如何解決懶加載問(wèn)題為什么需要緩存?看一個(gè)案例:-原理圖從上圖看出: 當(dāng)去查詢對(duì)象的時(shí)候,首先到一級(jí)緩存去取數(shù)據(jù),如果有,則不到數(shù)據(jù)庫(kù)中取,如果沒(méi)有則到數(shù)據(jù)庫(kù)中取,同時(shí)在一級(jí)緩存中放入對(duì)象.一級(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í)緩存中取,如沒(méi)有.再有不同的操作get 會(huì)立即向數(shù)據(jù)庫(kù)發(fā)請(qǐng)求,而load 會(huì)返回一個(gè)?list 會(huì)不會(huì)從 ses案例:/查詢 45 號(hào)學(xué)生對(duì)象,直到用戶真的去使用數(shù)據(jù),才會(huì)向數(shù)據(jù)庫(kù)發(fā)請(qǐng)求緩存取數(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í)緩存不需要配置,就可以使用,它本身沒(méi)有保護(hù)機(jī)制,所以程序員要考慮這個(gè)問(wèn)題,可以同

4、 evict 或者 clear 來(lái)清除 ses緩存中對(duì)象. evict 是清除一個(gè)對(duì)象,clear是清除所有的 se緩存對(duì)象 ses級(jí)緩存中對(duì)象的生命周期, 當(dāng) ses關(guān)閉后,就自動(dòng)銷毀.自己用HashMap 來(lái)模擬一個(gè) Ses緩存,加深對(duì)緩存的深入.package com.hsp.view;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyCache /使用 map 來(lái)模擬緩存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ù)庫(kù)中取);/到數(shù)據(jù)庫(kù)取Student stu=MyDB.getStudentFromDB(id);/放入緩存 maps.put(id, stu); return stu;/數(shù)據(jù)庫(kù)class MyDBsic List lists=newArrayList();/初始化數(shù)據(jù)庫(kù),假設(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ù)庫(kù)中沒(méi)有.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 緩存)來(lái)彌補(bǔ)這個(gè)問(wèn)1.2.3.需要配置二級(jí)緩存是交給第二級(jí)緩存的原理去處理,常見(jiàn)的Hashtable , OSCache , EHCache4.二級(jí)緩存的對(duì)象可能放在內(nèi)存,也可能放在磁盤.快速入門案例使用 OsCache 來(lái)演示二級(jí)緩存的使用.1.配置二級(jí)緩存對(duì)配置說(shuō)明:updatetrue.hibernate.cach

9、e.OSCacheProvidermap/Student.hbm.xml /2. 可以文件放在 src 目錄下,這樣你可以指定放入二級(jí)緩存的對(duì)象capacity 大小. 默認(rèn) 10003 使用/ TODO Auto-generated method stub/通過(guò)獲取一個(gè) se,讓 hibernate 框架運(yùn)行(config-加載 hibernate.cfg.xml)SesTrans=null;ion tx=null;try /使用基礎(chǔ)模板來(lái)講解.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ǔ)模板來(lái)講解.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 對(duì)象.Sistics sistics= Hiberna

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

13、 適用于所有數(shù)據(jù)庫(kù). 但是不要使用在多進(jìn)程,主鍵類型是數(shù)值型select max(id) from Student identity自增,每次增長(zhǎng) 1, 適用于支持 identity 的數(shù)據(jù)(數(shù)值 sequence native會(huì)根據(jù)數(shù)據(jù)類型來(lái)選擇,使用 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)系中,有另一張表的主鍵() 來(lái)決定 自己主鍵/ 外鍵( IdCard)給出一個(gè)簡(jiǎn)單原則:針對(duì) oracle 主鍵是 uuid 或者 assinged/long/short 建議使用sequence 主鍵是 String 使用針對(duì)主鍵是/long/short 建議使用 increment/assigend ,如果是字串 UUId/assigned針 對(duì) 主 鍵 是/long/shor

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論