生活随笔
收集整理的這篇文章主要介紹了
hibernate查询缓存_在Hibernate中启用实体和查询缓存
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
hibernate查詢緩存
1.簡介
在我執(zhí)行過的與性能相關(guān)的任務(wù)中,這就是其中之一。 令人擔(dān)心的是,如果對于特定實體每次都調(diào)用相同的查詢,并且表數(shù)據(jù)在特定的時隙內(nèi)不易更改,則我們可以使用Hibernate緩存查詢結(jié)果。 這意味著,如果我們需要ID為1234的Student的詳細(xì)信息,則查詢將僅針對第一個請求執(zhí)行并訪問數(shù)據(jù)庫。 后續(xù)請求與查詢緩存中的結(jié)果一起提供。 這對我們注意到的響應(yīng)時間產(chǎn)生了很大的影響。 在執(zhí)行此操作時,我們還擔(dān)心緩存何時刷新。 我們將通過簡單的配置輕松實現(xiàn)這一點,我們將對此進(jìn)行探討。
如果應(yīng)用了查詢緩存,則不會將任何后續(xù)SQL語句發(fā)送到數(shù)據(jù)庫。 從查詢緩存中檢索查詢結(jié)果,然后使用緩存的實體標(biāo)識符訪問第二級緩存。
2.實施
要啟用查詢緩存,以下是需要遵循的一組步驟–
將hibernate.cache.use_query_cache屬性設(shè)置為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保存緩存的查詢結(jié)果。 在ehCache配置文件中,添加以下代碼段– <cache name="org.hibernate.cache.StandardQueryCache" maxElementsInMemory="10000" eternal="false" timeToLiveSeconds="86400" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" /> 查詢緩存不會在緩存中緩存實際實體的狀態(tài)。 它緩存標(biāo)識符值和值類型的結(jié)果。 因此, 對于那些應(yīng)作為查詢結(jié)果緩存的一部分緩存的實體 ,請始終將查詢緩存與第二級緩存結(jié)合使用 – https://docs.jboss.org/hibernate/orm/4.0/devguide/zh- US / html / ch06.html 要緩存第4點中指定的相關(guān)實體,我們需要將以下代碼段添加到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> 上面的內(nèi)容確保了實體的非惰性組件作為查詢結(jié)果緩存的一部分被緩存。
涵蓋了以上所有要點之后,最后一點是顯式啟用對單個查詢的查詢緩存,如下所示: Query query = session.createQuery("FROM EMPLOYEE");
query.setCacheable(true);
List users = query.list(); 完成所有這些操作之后,也許您可??以在調(diào)試模式下啟動服務(wù)器并看到神奇的事情發(fā)生了!
翻譯自: https://www.javacodegeeks.com/2016/04/enabling-entity-query-cache-hibernate.html
hibernate查詢緩存
總結(jié)
以上是生活随笔為你收集整理的hibernate查询缓存_在Hibernate中启用实体和查询缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。