Hibernate快取機制
快取:為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。
快取的工作原理:
物理資料來源——>(資料)快取——>(資料)記憶體
在應用程式中首先會選擇在快取中讀取資料,如果快取中沒有再選擇在資料庫中讀取並把讀取的資料放到快取中;有點類似暫存器。
在Hibernate中使用不同的Session物件進行資料庫操作,他們之間不能共享同一個快取;也就是不同的Session物件多次查詢同一個物件是會產生多條查詢語句。
Hibernate一級快取:
1.一級快取有成為Session快取,會話快取;
2.通過Session物件從資料庫中查詢實體,會把實體在記憶體中儲存起來,下一次查詢該實體時,直接從記憶體中讀取;
3.一級快取的宣告週期和Session物件的生命週期相同;
4.一級快取中的資料適用於當前快取中;
一級快取無法取消,可以用兩個方法進行管理:
1.evict():用於將某個物件從Session的一級快取中清除;
2.clear():用於將一級快取中的所有物件全部清除;
在查詢的時候有時也不會使用快取如:
Query query=session.CreateQuery("*******");
query.list():不會使用快取,query.iterate():會使用快取;
二級快取:
二級快取也稱為全域性快取,在所有的Session的物件都會共享一個快取;
二級快取的配置步驟:
1.新增二級快取的Jar包;
2.在hibernate的配置檔案中新增provide類的描述:
<!-- 指定二級快取的外部實現類 -->
<property name="cache.provider_class">net.sf.encache.hibernate.EhCacheProvider</property>
3.新增encache.xml到專案中;
4.在需要被快取的表的對映檔案新增<cache>標籤
二級快取的適應資料:
很少被修改的、不重要、參考資料