Hibernate學習筆記 解析二級快取

2021-09-27 12:51:07 字數 2131 閱讀 5429

計算機領域非常通用的概念,它介於應用程式和永久性資料儲存源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料儲存源的頻率,從而提高應用的執行效能,快取中的資料是資料儲存源中資料的拷貝。

快取的物理介質通常是記憶體。

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...