生活随笔
收集整理的這篇文章主要介紹了
在Hibernate中启用实体和查询缓存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.簡介
在我執行過的與性能相關的任務中,這就是其中之一。 令人擔心的是,如果每次為特定實體調用相同的查詢,并且表數據在特定的時隙內不易更改,則我們可以使用Hibernate緩存查詢結果。 這意味著,如果我們需要ID為1234的Student的詳細信息,則查詢將僅針對第一個請求執行并訪問數據庫。 后續請求與查詢緩存中的結果一起提供。 這對我們注意到的響應時間產生了很大的影響。 在執行此操作時,我們還擔心緩存何時刷新。 我們將通過一個簡單的配置輕松地做到這一點,我們將對此進行探討。
如果應用查詢緩存,則不會將任何后續SQL語句發送到數據庫。 從查詢緩存中檢索查詢結果,然后使用緩存的實體標識符訪問第二級緩存。
2.實施
要啟用查詢緩存,下面是需要遵循的步驟集–
將hibernate.cache.use_query_cache屬性設置為true ,并確保啟用了第二級緩存 。 單擊此鏈接以了解二級緩存。 <bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><!-- Enable second level cache --><prop key="hibernate.cache.use_second_level_cache">true</prop><prop key="hibernate.cache.use_query_cache">true</prop><prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop><prop key="net.sf.ehcache.configurationResourceName">/ehCache.xml</prop></props></property><property name="mappingResources"><list><value>User.hbm.xml</value></list></property>
</bean> 完成后, org.hibernate.cache.internal.StandardQueryCache保存緩存的查詢結果。 在ehCache配置文件中,添加以下代碼段– <cache name="org.hibernate.cache.StandardQueryCache" maxElementsInMemory="10000" eternal="false" timeToLiveSeconds="86400" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" /> 查詢緩存不會在緩存中緩存實際實體的狀態。 它緩存標識符值和值類型的結果。 因此, 對于那些應作為查詢結果緩存的一部分緩存的實體 ,請始終將查詢緩存與第二級緩存結合使用 – https://docs.jboss.org/hibernate/orm/4.0/devguide/zh- US / html / ch06.html 要按照第4點的指示緩存相關實體,我們需要將以下代碼段添加到XML實體映射文件中,如下所示: <?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"><cache usage="transactional" include="non-lazy" /><id name="id" type="int" column="ID"><generator class="native"/></id><property name="firstName" column="FNAME" type="string"/><property name="lastName" column="LNAME" type="string"/></class>
</hibernate-mapping> 上面的內容確保實體的非惰性組件作為查詢結果緩存的一部分被緩存。
涵蓋了以上所有要點之后,最后一點是顯式啟用對單個查詢的查詢緩存,如下所示: Query query = session.createQuery("FROM EMPLOYEE");
query.setCacheable(true);
List users = query.list(); 完成所有這些操作之后,也許您可??以在調試模式下啟動服務器,然后看看魔術發生了!
翻譯自: https://www.javacodegeeks.com/2016/04/enabling-entity-query-cache-hibernate.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的在Hibernate中启用实体和查询缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。