大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Hibernate緩存詳解

Hibernate緩存詳解

更新時間:2022-02-11 10:56:06 來源:動力節(jié)點 瀏覽799次

緩存是一種提高系統(tǒng)性能的機制。它是位于應用程序和數(shù)據(jù)庫之間的緩沖存儲器。高速緩存存儲最近使用的數(shù)據(jù)項,以盡可能減少數(shù)據(jù)庫命中的次數(shù)。

緩存對 Hibernate 也很重要。它使用多級緩存方案,如下所述

一級緩存

一級緩存是Session緩存,是所有請求都必須通過的強制緩存。Session 對象在將對象提交到數(shù)據(jù)庫之前將其保持在自己的權(quán)力之下。

如果您對一個對象發(fā)出多個更新,Hibernate 會嘗試盡可能長時間地延遲執(zhí)行更新,以減少發(fā)出的更新 SQL 語句的數(shù)量。如果您關(guān)閉會話,所有正在緩存的對象都將丟失,并在數(shù)據(jù)庫中保留或更新。

二級緩存

二級緩存是可選的緩存,在嘗試定位二級緩存中的對象之前,將始終參考一級緩存。二級緩存可以基于每個類和每個集合進行配置,主要負責跨會話緩存對象。

任何第三方緩存都可以與 Hibernate 一起使用。提供了一個org.hibernate.cache.CacheProvider接口,必須實現(xiàn)該接口才能為 Hibernate 提供緩存實現(xiàn)的句柄。

查詢級緩存

Hibernate 還實現(xiàn)了與二級緩存緊密集成的查詢結(jié)果集緩存。

這是一個可選功能,需要兩個額外的物理緩存區(qū)域來保存緩存的查詢結(jié)果和上次更新表時的時間戳。這僅對使用相同參數(shù)頻繁運行的查詢有用。

二級緩存

Hibernate默認使用一級緩存,你不用做一級緩存。讓我們直接進入可選的二級緩存。并非所有類都能從緩存中受益,因此能夠禁用二級緩存很重要。

Hibernate 二級緩存分兩步設(shè)置。首先,您必須決定使用哪種并發(fā)策略。之后,您可以使用緩存提供程序配置緩存過期和物理緩存屬性。

并發(fā)策略

并發(fā)策略是一個中介,它負責將數(shù)據(jù)項存儲在緩存中并從緩存中檢索它們。如果要啟用二級緩存,則必須為每個持久類和集合決定使用哪種緩存并發(fā)策略。

Transactional - 將此策略用于以讀取為主的數(shù)據(jù),在這種情況下,在極少數(shù)更新的情況下,防止并發(fā)事務(wù)中的陳舊數(shù)據(jù)至關(guān)重要。

Read-write - 再次將此策略用于以讀取為主的數(shù)據(jù),在這種情況下,在極少數(shù)更新的情況下,防止并發(fā)事務(wù)中的陳舊數(shù)據(jù)至關(guān)重要。

Nonstrict-read-write - 此策略無法保證緩存和數(shù)據(jù)庫之間的一致性。如果數(shù)據(jù)幾乎從未更改并且過時數(shù)據(jù)的可能性很小不是關(guān)鍵問題,則使用此策略。

只讀- 適用于數(shù)據(jù)的并發(fā)策略,永遠不會改變。僅將其用作參考數(shù)據(jù)。

如果我們要為Employee類使用二級緩存,讓我們添加所需的映射元素,告訴 Hibernate 使用讀寫策略緩存 Employee 實例。

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
   <class name = "Employee" table = "EMPLOYEE">      
      <meta attribute = "class-description">
         This class contains the employee detail. 
      </meta>      
      <cache usage = "read-write"/>      
      <id name = "id" type = "int" column = "id">
         <generator class="native"/>
      </id>      
      <property name = "firstName" column = "first_name" type = "string"/>
      <property name = "lastName" column = "last_name" type = "string"/>
      <property name = "salary" column = "salary" type = "int"/>      
   </class>
</hibernate-mapping>

usage="read-write" 屬性告訴 Hibernate 對定義的緩存使用讀寫并發(fā)策略。

查詢級緩存

要使用查詢緩存,您必須首先使用配置文件中的hibernate.cache.use_query_cache="true"屬性激活它。通過將此屬性設(shè)置為 true,您可以讓 Hibernate 在內(nèi)存中創(chuàng)建必要的緩存來保存查詢和標識符集。

接下來,要使用查詢緩存,請使用 Query 類的 setCacheable(Boolean) 方法。例如

Session session = SessionFactory.openSession();
Query query = session.createQuery("FROM EMPLOYEE");
query.setCacheable(true);
List users = query.list();
SessionFactory.closeSession();

Hibernate 還通過緩存區(qū)域的概念支持非常細粒度的緩存支持。緩存區(qū)域是指定名稱的緩存的一部分。

Session session = SessionFactory.openSession();
Query query = session.createQuery("FROM EMPLOYEE");
query.setCacheable(true);
query.setCacheRegion("employee");
List users = query.list();
SessionFactory.closeSession();

此代碼使用該方法告訴 Hibernate 在緩存的員工區(qū)域中存儲和查找查詢。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产欧美乱码在线看 | 欧美精品亚洲精品日韩专区va | 欧美影视一区 | 亚洲一区在线视频 | 九九99久麻豆精品视传媒 | 欧美妇性猛交视频 | 天天骑夜夜操 | 久久精品综合一区二区三区 | 欧美人在线一区二区三区 | 澳门成人免费永久视频 | 四虎影剧院 | 亚洲在线激情 | 熟妇毛茸茸xxxoo | 国产成在线人视频免费视频 | 成人黄色一级片 | 久久精彩免费视频 | 国产一区二区免费 | 久久亚洲国产视频 | 精品亚洲视频在线观看 | 欧美在线一区二区三区 | 在线成人中文字幕 | 奇米77777| 337p亚洲精品色噜噜狠狠 | 91香蕉黄| 农村女人十八毛片a级毛片 农村三级孕妇视频在线 | 久久精品一区二区三区不卡 | 欧美日韩免费 | 欧美黄一片 | 久久免费视频网 | 国产精品久久久久久久久免费观看 | 成人国产精品毛片 | 国产三级做爰在线观看∵ | 久久久久久久久久综合情日本 | 亚洲精品视频在线观看免费 | 国产探花一区 | 欧美香蕉视频 | 国产视频一区二区 | 久久国产精品免费网站 | 美女视频黄的免费视频网页 | 99在线影院 | 香蕉在线播放 |