Hibernate框架中共有兩級緩存. Session級別的緩存是屬于一級緩存,SessionFactory級別的緩存是二級緩存.
緩存:將數(shù)據(jù)庫或硬盤中的數(shù)據(jù),存入到內(nèi)存中.當下次使用的時候可以從內(nèi)存中獲得,減少數(shù)據(jù)庫訪問次數(shù).(優(yōu)化)
1.什么是hibernate的一級緩存
在 Session 接口的實現(xiàn)中包含一系列的 Java 集合, 這些 Java 集合構(gòu)成了 Session 緩存. 只要 Session 實例沒有結(jié)束生命周期, 存放在它緩存中的對象也不會結(jié)束生命周期.
2.一級緩存:生命周期與session一致.
3.程序測試
@Test
public void test1(){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx = s.beginTransaction();
//發(fā)送查詢語句,并且把查詢出來的實體類對象存入Session的緩存之中。
實體類 c1 = s.get(實體類.class, 94);
System.out.println(c1);
//會先去Session的緩存之中去查找,如果有就直接拿出來用。
實體類 c2 = s.get(實體類.class, 94);
System.out.println(c2);
tx.commit();
}catch(Exception e){
tx.rollback();
}finally{
s.close();
}
}
4.快照機制
@Test
public void test2(){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx = s.beginTransaction();
實體類 c1 = s.get(實體類.class, 94);
System.out.println(c1);//輸出客戶級別是:VIP客戶
c1.setCustLevel("普通客戶");//修改客戶的級別是:普通客戶
System.out.println(c1);//輸出客戶級別:普通客戶
tx.commit();//默認在此時執(zhí)行快照機制。用緩存和快照進行比較,如果不一致,使用緩存同步數(shù)據(jù)庫中的數(shù)據(jù),同時刷新緩存和快照。
}catch(Exception e){
tx.rollback();
}finally{
s.close();
}
}.
當執(zhí)行到 tx.commit(); 默認在此時執(zhí)行快照機制。用緩存和快照進行比較,如果不一致,使用緩存同步數(shù)據(jù)庫中的數(shù)據(jù),同時刷新緩存和快照。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。