少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          假設類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

          posted on 2012-05-13 02:07 abin 閱讀(1932) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 贡山| 仁寿县| 中宁县| 太仓市| 上高县| 宝应县| 芜湖市| 白水县| 山东省| 那曲县| 兰考县| 本溪| 卢龙县| 仙游县| 琼中| 察哈| 永吉县| 平陆县| 依兰县| 东至县| 浙江省| 庄河市| 浮山县| 车致| 大厂| 双峰县| 右玉县| 银川市| 威海市| 津南区| 田林县| 沛县| 香格里拉县| 左云县| 民权县| 五家渠市| 鸡东县| 南昌县| 贞丰县| 蒲城县| 新和县|