快取(cache): 計算機領域非常通用的概念。它介於應用程式和永久性資料儲存源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料儲存源的頻率,從而提高應用的執行效能。快取中的資料是資料儲存源中資料的拷貝。快取的物理介質通常是記憶體;
hibernate中提供了兩個級別的快取
第一級別的快取是 session 級別的快取,它是屬於事務範圍的快取。這一級別的快取由 hibernate 管理的
第二級別的快取是 sessionfactory 級別的快取,它是屬於程序範圍的快取
sessionfactory 的快取可以分為兩類:
內建快取: hibernate 自帶的, 不可解除安裝. 通常在 hibernate 的初始化階段, hibernate 會把對映元資料和預定義的 sql 語句放到 sessionfactory 的快取中, 對映元資料是對映檔案中資料(.hbm.xml 檔案中的資料)的複製. 該內建快取是唯讀的.
外接快取(二級快取): 乙個可配置的快取外掛程式. 在預設情況下, sessionfactory 不會啟用這個快取外掛程式. 外接快取中的資料是資料庫資料的複製, 外接快取的物理介質可以是記憶體或硬碟
適合放入二級快取中的資料: 很少被修改 不是很重要的資料, 允許出現偶爾的併發問題
不適合放入二級快取中的資料: 經常被修改 財務資料, 絕對不允許出現併發問題 與其他應用程式共享的資料
1. 使用 hibernate 二級快取的步驟:1). 加入二級快取外掛程式的 jar 包及配置檔案:
i. 複製 \hibernate-release-4.2.4.final\lib\optional\ehcache\*.jar 到當前 hibrenate 應用的類路徑下.
ii. 複製 hibernate-release-4.2.4.final\project\etc\ehcachexml 到當前 web 應用的類路徑下
2). 配置 hibernate.cfg.xml
i. 配置啟用 hibernate 的二級快取
true
ii. 配置hibernate二級快取使用的產品
org.hibernate.cache.ehcache.ehcacheregionfactory
iii. 配置對哪些類使用 hibernate 的二級快取
實際上也可以在 .hbm.xml 檔案中配置對哪些類使用二級快取, 及二級快取的策略是什麼.
2). 集合級別的二級快取的配置
i. 配置對集合使用二級快取
也可以在 .hbm.xml 檔案中進行配置
class="com.atguigu.hibernate.entities.employee" />
ii. 注意: 還需要配置集合中的元素對應的持久化類也使用二級快取!否則將會多出 n 條 sql 語句.
3). ehcache 的 配置檔案: ehcache.xml
maxelementsinmemory="10000"eternal="false"timetoidleseconds="120"timetoliveseconds="120"overflowtodisk="true"
/>
maxelementsinmemory="1"eternal="false"timetoidleseconds="300"timetoliveseconds="600"overflowtodisk="true"
/>
maxelementsinmemory="1000"eternal="true"timetoidleseconds="0"timetoliveseconds="0"overflowtodisk="false"
/>
4). 查詢快取: 預設情況下, 設定的快取對 hql 及 qbc 查詢時無效的, 但可以通過以下方式使其是有效的
i. 在 hibernate 配置檔案中宣告開啟查詢快取
true
ii. 呼叫 query 或 criteria 的 setcacheable(
true
) 方法
iii. 查詢快取依賴於二級快取
hibernate二級快取
cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...
hibernate 二級快取
session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...
Hibernate二級快取
hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...