假設類A為持久化對象,對應表為tableA,這里沒有考慮A和其他表關聯的情況。
在spring下配置使用二級緩存:
<property name="hibernateProperties">
<props>
........
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
</props>
</property>
其中${hibernate.cache.provider_class}為net.sf.ehcache.hibernate.EhCacheProvider,${hibernate.cache.use_query_cache}屬性值為true(對經常使用的List查詢方式,只有在使用查詢緩存時,才會從緩存中通過id去get緩存的值;查詢緩存一般緩存查詢語句和查詢結果的id)
A的持久化映射文件中加上cache元素:usage屬性的取值根據自己的情況自己指定相應的值
<cache usage="read-write"/>
配置spring的HibernateTemplate對查詢語句和結果緩存(cacheQueries值為true):
<bean id="hibernateTemplate"
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
<property name="cacheQueries" value="${hibernate.cache.use_query_cache}"></property>
</bean>
開發的spring dao(集成HibernateDaoSupport)應該配置實用這個hibernateTemplate:
<bean id="myDao" of HibernateDaoSupport">
<property name="hibernateTemplate" ref="hibernateTemplate" />
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
在src下新建ehcache.xml文件,文件內容如下:
<ehcache>
<diskStore path="java.io.tmpdir"/>
<!--
eternal:元素是否永久的;
MemoryStoreEvictionPolicy:default is LRU
-->
<defaultCache maxElementsInMemory="10000"
eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"
overflowToDisk="true" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
<cache name="cn.hnisi.persistence.mmedia.Dmtjbxx"
maxElementsInMemory="500" eternal="false"
timeToIdleSeconds="2400" timeToLiveSeconds="3600"
overflowToDisk="false"/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="50" eternal="false" timeToIdleSeconds="600"
timeToLiveSeconds="1200" overflowToDisk="false"/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="500" eternal="true" overflowToDisk="false"/>
</ehcache>
然后你可以使用HQL查詢對象了,比如"from A where name=?";
跟蹤查詢的sql日志就可以看出第一次是查詢數據庫,第二次是從緩存中get(見Hibernate ReadWriteCache類的get方法)
問題:什么樣的數據適合存放到第二級緩存中?
1 很少被修改的數據
2 不是很重要的數據,允許出現偶爾并發的數據
3 不會被并發訪問的數據
4 參考數據,指的是供應用參考的常量數據,它的實例數目有限,它的實例會被許多其他類的實例引用,實例極少或者從來不會被修改。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/selley/archive/2008/03/13/2177479.aspx