自:
二級快取稱為程序級快取或sessionfactory級快取,它可以被所有session共享,它的生命週期伴隨著sessionfactory的生命週期存在和消亡。
第一步:複製ehcache.xml檔案到src目錄下,配置二級快取
/>
也可以配置某個特定物件的,如(但一般情況是使用預設的就可以了):
第二步:啟用二級快取
1.啟用二級快取,預設是啟用的:
true
2.設定快取產品,如:
org.hibernate.cache.ehcacheprovider
3.指定哪些類使用二級快取(兩種方法):
a.在hibernate.cfg.xml配置檔案中定義
如:b.在對映檔案中定義
如:在節點下:
有些類設定二級快取,有些類不設定二級快取;所以如果在對映檔案中定義二級快取的話會導致標籤遍布在檔案中,
因此常用第一種,即在hibernate.cfg.xml配置檔案中定義,這樣便於維護和管理。
第三步:二級快取例項
1.開啟兩次session,呼叫load查詢
**部分:
session session = this.sf.opensession();
user u1 = (user) session.load(user.class, 1);
system.out.println("使用者姓名:"+u1.getname());
//關閉seeion,釋放一級快取
session.close();
//重新開啟session
session = this.sf.opensession();
user u = (user) session.load(user.class, 1);
system.out.println("使用者姓名:"+u.getname());
session.close();
執行部分:
如果設定false,執行結果如下:
hibernate:
select
user0_.id as id0_0_,
user0_.name as name0_0_,
user0_.password as password0_0_,
user0_.createtime as createtime0_0_,
user0_.expiretime as expiretime0_0_
from
t_user user0_
where
user0_.id=?
使用者姓名:wangwu
hibernate:
select
user0_.id as id0_0_,
user0_.name as name0_0_,
user0_.password as password0_0_,
user0_.createtime as createtime0_0_,
user0_.expiretime as expiretime0_0_
from
t_user user0_
where
user0_.id=?
使用者姓名:wangwu
如果設定true,執行結果如下:
hibernate:
select
user0_.id as id0_0_,
user0_.name as name0_0_,
user0_.password as password0_0_,
user0_.createtime as createtime0_0_,
user0_.expiretime as expiretime0_0_
from
t_user user0_
where
user0_.id=?
使用者姓名:wangwu
使用者姓名:wangwu
可見,二級快取是起作用了的。用get測試是同樣的結果
2.在1的**中加入this.sf.evict(user.class),清除二級快取中的物件,執行結果就跟設定了false的效果相同。
當然也可以指定清除哪些物件:this.sf.evict(user.class,1),結果很簡單。
3.一級快取和二級快取的互動(cachemode:cachemode.normal、cachemode.put、cachemode.get)
**部分:
session session = this.sf.opensession();
只向二級快取中讀資料不寫
session.setcachemode(cachemode.get); ……1
user u1 = (user) session.load(user.class, 1); ……2
//**1和**2順序不能顛倒,否則cachemode.get對1號使用者不起作用
system.out.println("使用者姓名:"+u1.getname());
session.close();
//重新開啟session
session = this.sf.opensession();
user u = (user) session.load(user.class, 1);
system.out.println("使用者姓名:"+u.getname());
session.close();
執行結果:
hibernate:
select
user0_.id as id0_0_,
user0_.name as name0_0_,
user0_.password as password0_0_,
user0_.createtime as createtime0_0_,
user0_.expiretime as expiretime0_0_
from
t_user user0_
where
user0_.id=?
使用者姓名:wangwu
hibernate:
select
user0_.id as id0_0_,
user0_.name as name0_0_,
user0_.password as password0_0_,
user0_.createtime as createtime0_0_,
user0_.expiretime as expiretime0_0_
from
t_user user0_
where
user0_.id=?
使用者姓名:wangwu
預設情況下又讀又寫,即為cachemode.normal
cachemode.put只寫不讀
hibernate二級快取
cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...
hibernate 二級快取
session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...
Hibernate二級快取
hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...