中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate中二級緩存的配置和使用方法

發布時間:2021-07-13 15:40:27 來源:億速云 閱讀:123 作者:chen 欄目:編程語言

這篇文章主要介紹“Hibernate中二級緩存的配置和使用方法”,在日常操作中,相信很多人在Hibernate中二級緩存的配置和使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hibernate中二級緩存的配置和使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

(一)Hibernate的二級緩存策略的一般過程如下:

1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL語句查詢數據庫,一次獲得所有的數據對象。

2) 把獲得的所有數據對象根據ID放入到第二級緩存中。

3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那么從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。

4) 刪除、更新、增加數據的時候,同時更新緩存。

Hibernate的二級緩存策略,是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的Query Cache。

(二)什么樣的數據適合存放到第二級緩存中?

1 很少被修改的數據

2 不是很重要的數據,允許出現偶爾并發的數據

3 不會被并發訪問的數據

4 參考數據,指的是供應用參考的常量數據,它的實例數目有限,它的實例會被許多其他類的實例引用,實例極少或者從來不會被修改。

(三)不適合存放到第二級緩存的數據?

1 經常被修改的數據

2 財務數據,絕對不允許出現并發

3 與其他應用共享的數據。

實踐部分:

使用EhCache配置二級緩存

配置準備:

1)把ehcache-1.2.3.jar加入到當前應用的classpath中。

2)在hibernate.cfg.xml文件中加入EhCache緩存插件的提供類。

<!--配置緩存插件 -->   <property name="hibernate.cache.provider_class">       org.hibernate.cache.EhCacheProvider   </property>

3)挎貝ehcache.xml文件到類路徑(項目工程的src目錄下),這個文件在Hibernate安裝目錄的etc下。

配置步驟:

Hibernate允許在類和集合的粒度上設置第二級緩存。在映射文件中,<class>和<set>元素都有一個<cache>子元素,這個子元素用來配置二級緩存。
示例:以category(產品類別)和product(產品)的映射為例:

1) 修改要配置緩存的那個持久化類的對象關系映射文件:

Category.hbm.xml

<?xml version="1.0" encoding="utf-8"?>   <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   <hibernate-mapping>       <class name="org.qiujy.domain.cachedemo.Category" table="categories">          <!—                配置緩存,必須緊跟在class元素后面               對緩存中的Category對象采用讀寫型的并發訪問策略           -->          <cache usage="read-write"/>                   <id name="id" type="java.lang.Long">              <column name="id" />              <generator class="native" />          </id>          <!-- 配置版本號,必須緊跟在id元素后面 -->          <version name="version" column="version" type="java.lang.Long" />                   <property name="name" type="java.lang.String">              <column name="name" length="32" not-null="true"/>          </property>                   <property name="description" type="java.lang.String">              <column name="description" length="255"/>          </property>                   <set name="products" table="products" cascade="all" inverse="true">              <!-- Hibernate只會緩存對象的簡單屬性的值,          要緩存集合屬性,必須在集合元素中也加入<cache>子元素          而Hibernate僅僅是把與當前持久對象關聯的對象的OID存放到緩存中。   如果希望把整個關聯的對象的所有數據都存入緩存,   則要在相應關聯的對象的映射文件中配置<cache>元素              -->              <cache usage="read-write"/>                           <key column="categoryId" not-null="true"/>              <one-to-many class="org.qiujy.domain.cachedemo.Product"/>          </set>                </class>   </hibernate-mapping>

Product.hbm.xml

<?xml version="1.0" encoding="utf-8"?>   <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   <hibernate-mapping>       <class name="org.qiujy.domain.cachedemo.Product" table="products">                   <cache usage="read-write"/>                   <id name="id" type="java.lang.Long">              <column name="id" />              <generator class="native" />          </id>          <!-- 配置版本號,必須緊跟在id元素后面 -->          <version name="version" column="version" type="java.lang.Long" />                   <property name="name" type="java.lang.String">              <column name="name" length="32" not-null="true"/>          </property>                   <property name="description" type="java.lang.String">              <column name="description" length="255"/>          </property>                   <property name="unitCost" type="java.lang.Double">              <column name="unitCost" />          </property>                   <property name="pubTime" type="java.util.Date">              <column name="pubTime" not-null="true" />          </property>                   <many-to-one name="category"                   column="categoryId"                  class="org.qiujy.domain.cachedemo.Category"                  cascade="save-update"                   not-null="true">           </many-to-one>                </class>   </hibernate-mapping>

2)編輯ehcache.xml文件:

<ehcache>       <diskStore path="c:\\ehcache\"/>       <defaultCache           maxElementsInMemory="10000"           eternal="false"           timeToIdleSeconds="120"           timeToLiveSeconds="120"           overflowToDisk="true"             />                 <!-- 設置Category類的緩存的數據過期策略 -->       <cache name="org.qiujy.domain.cachedemo.Category"           maxElementsInMemory="100"           eternal="true"           timeToIdleSeconds="0"           timeToLiveSeconds="0"           overflowToDisk="false"           />                  <!-- 設置Category類的products集合的緩存的數據過期策略 -->        <cache name="org.qiujy.domain.cachedemo.Category.products"           maxElementsInMemory="500"           eternal="false"           timeToIdleSeconds="300"           timeToLiveSeconds="600"           overflowToDisk="true"           />                 <cache name="org.qiujy.domain.cachedemo.Product"           maxElementsInMemory="500"           eternal="false"           timeToIdleSeconds="300"           timeToLiveSeconds="600"           overflowToDisk="true"           />         </ehcache>

在Spring托管的Hibernate中使用二級緩存 1.在spring的配置文件中,hibernate部分加入 xml 代碼org.hibernate.cache.EhCacheProvidertrue2.為HBM表設置cache策略 xml 代碼3.在DAO中,調用find方法查詢之前,設置使用緩存 Java代碼 getHibernateTemplate().setCacheQueries(true); 補充: 如果不設置“查詢緩存”,那么hibernate只會緩存使用load()方法獲得的單個持久化對象,如果想緩存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法獲得的數據結果集的話,就需要設置 hibernate.cache.use_query_cache true 才行。

到此,關于“Hibernate中二級緩存的配置和使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朔州市| 峨山| 宜昌市| 芦山县| 普宁市| 诸城市| 龙陵县| 洛浦县| 阳东县| 苗栗市| 泌阳县| 康保县| 茂名市| 北京市| 永定县| 岳普湖县| 伊春市| 宜阳县| 米易县| 新营市| 桦川县| 林州市| 应城市| 临朐县| 体育| 平陆县| 河西区| 军事| 大方县| 镇远县| 大竹县| 夏邑县| 沈丘县| 深圳市| 凌源市| 柞水县| 奉节县| 忻州市| 郸城县| 湟源县| 华安县|