計算機領域非常通用的概念,它介於應用程式和永久性資料儲存源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料儲存源的頻率,從而提高應用的執行效能,快取中的資料是資料儲存源中資料的拷貝。
快取的物理介質通常是記憶體。
hibernate提供的兩種級別的快取:
sessionfactory級別的快取可以分為兩類
適合放入二級快取中的資料:
不適合放入二級快取中的資料:
兩個併發的事務同時訪問持久層的快取的相同資料時,也有可能出現各類併發問題。
二級快取可以設定以下4種型別的併發訪問策略,每一種訪問策略對應一種事務隔離級別
實際上也可以在.hbm.xml
檔案中配置對哪些類使用二級快取及二級快取的策略。例如在employee.hbm.xml
檔案的class
節點裡面加上
。
設定二級快取之後,測試如下:
@org.junit.test
public void testhibernatesecondlevelcache()
在沒設定二級快取的時候,該情形會傳送兩次sql語句,因為在中間關閉了session
後再重新開啟。而我們已經設定了二級快取,因此只會傳送一條sql語句。
以department為例,配置檔案hibernate.cfg.xml
如下:
<?xml version='1.0' encoding='utf-8'?>
com.mysql.jdbc.driver
jdbc:mysql://localhost:3306/hibernate5
root
root
org.hibernate.dialect.mysql5dialect
true
true
update
2true
org.hibernate.c3p0.internal.c3p0connectionprovider105
22000
2000
10 100
30true
org.hibernate.cache.ehcache.internal.ehcacheregionfactory
測試:
@org.junit.test
public void testcollectionsecondlevelcache()
關於幾個標籤
hibernate在不同的快取區域儲存不同的類/集合
對於類而言,區域的名稱是類名,例如:com.cerr.domain.customer
對於集合而言,區域的名稱是類名加屬性名,例如:com.cerr.domain.customer.orders
cache元素的屬性
預設情況下,設定的快取對hql及qbc查詢是無效的,但可以通過設定查詢快取來使其支援這兩種查詢。
設定的步驟:
注意:查詢快取依賴於二級快取,即若要使用查詢快取,必須先配置二級快取,否則無法使用。
demo如下:
@org.junit.test
public void testquerycache()
同list()
一樣也能執行查詢操作。
list()
執行的sql語句包含實體類對應的資料表的所有字段。
iterator()
執行的sql語句中僅包含實體類對應的資料表的id欄位。
當遍歷訪問結果集時,該方法先到session快取及二級快取中檢視是否存在特定oid的物件,如果存在,就直接返回該物件,如果不存在該物件就通過相應的sql select語句到資料庫中載入特定的實體物件
大多數情況下,應考慮使用list()
執行查詢操作,iterator()
僅僅在滿足以下條件的場合,可以稍微提高查詢效能:
學習hibernate筆記
1.首先要配置hibernate.xml 配置檔案,然後建立每個實體類的對映檔案 x.hbm.xml。2.準備工作做好之後,在寫測試類時先要拿到configuration cfg org.cfg.configuration 用來讀配置檔案的 然後通過cfg.configur返回乙個 找到配置檔案自身...
Hibernate學習筆記
什麼是orm呢?orm是一種思想 orm關注是物件與資料庫中的列的關係 什麼是hibernate?hibernate是乙個物件關係對映框架,它將pojo與資料庫表建立對映關係,自動生成sql語句,自動執行。hibernate的核心api 一共有6個,分別為 session sessionfactor...
學習hibernate筆記
exception in thread main org.hibernate.service.spi.serviceexception unable to create requested service org.hibernate.engine.jdbc.env.spi.jdbcenvironme...