沉睡森林@漂在北京

          本處文章除注明“轉載”外均為原創,轉載請注明出處。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            152 隨筆 :: 4 文章 :: 114 評論 :: 0 Trackbacks
          1、首先設置EhCache,建立配置文件ehcache.XML,默認的位置在class-path,可以放到你的src目錄下:

          <?xml version="1.0" encoding="UTF-8"?>
          <ehcache>
          <diskStore path="Java.io.tmpdir"/> 
          <defaultCache
          maxElementsInMemory="10000" <!-- 緩存最大數目 -->
          eternal="false" <!-- 緩存是否持久 -->
          overflowToDisk="true" <!-- 是否保存到磁盤,當系統當機時-->
          timeToIdleSeconds="300" <!-- 當緩存閑置n秒后銷毀 -->
          timeToLiveSeconds="180" <!-- 當緩存存活n秒后銷毀-->
          diskPersistent="false"
          diskExpiryThreadIntervalSeconds= "120"/> 
          </ehcache> 


          2、在Hibernate配置文件中設置:

          <!-- 設置Hibernate的緩存接口類,這個類在Hibernate包中 -->
          <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
          <!-- 是否使用查詢緩存 -->
          <property name="hibernate.cache.use_query_cache">true</property>
          如果使用spring調用Hibernate的sessionFactory的話,這樣設置:
          <!--HibernateSession工廠管理 -->
          <bean id="sessionFactory" 

                  class="org.springFramework.orm.hibernate3.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref bean="datasource" />
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
          <prop key="connection.provider_class">

                           org.hibernate.connection.C3P0ConnectionProvider

                 </prop>
          <prop key="hibernate.show_sql">true</prop>
          <prop key="hibernate.cache.use_query_cache">true</prop>
          <prop key="hibernate.cache.provider_class">

                    org.hibernate.cache.EhCacheProvider

                 </prop>
          </props>
          </property>
          <property name="mappingDirectoryLocations">
          <list>
          <value>/Web-INF/classes/cn/rmic/manager/hibernate/</value>
          </list>
          </property> 
          </bean> 


          說明一下:如果不設置“查詢緩存”,那么hibernate只會緩存使用load()方法獲得的單個持久化對象,如果想緩存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法獲得的數據結果集的話,就需要設置hibernate.cache.use_query_cache true才行。

          3、在Hbm文件中添加<cache usage="read-only"/>

          4、如果需要“查詢緩存”,還需要在使用Query或Criteria()時設置其setCacheable(true);屬性

          5、實踐出真知,給一段測試程序,如果成功的話第二次查詢時不會讀取數據庫

          package cn.rmic.hibernatesample;

          import java.util.List;

          import org.hibernate.CacheMode;
          import org.hibernate.Criteria;
          import org.hibernate.Query;
          import org.hibernate.Session;

          import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;
          import cn.rmic.manager.po.Resources;

          public class testCacheSelectList {

          /** *//**
          * @param args
          */
          public static void main(String[] args) {
          // TODO Auto-generated method stub

          Session s=HibernateSessionFactory.getSession();
          Criteria c=s.createCriteria(Resources.class);
          c.setCacheable(true);
          List l=c.list();
          // Query q=s.createQuery("From Resources r")
          // .setCacheable(true) 
          // .setCacheRegion("frontpages") ;
          // List l=q.list();
          Resources resources=(Resources)l.get(0);
          System.out.println("-1-"+resources.getName());
          HibernateSessionFactory.closeSession();
          try {
          Thread.sleep(5000);
          } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }
          s=HibernateSessionFactory.getSession();
          c=s.createCriteria(Resources.class);
          c.setCacheable(true);
          l=c.list();
          // q=s.createQuery("From Resources r").setCacheable(true) 
          // .setCacheRegion("frontpages");
          // l=q.list();
          resources=(Resources)l.get(0);
          System.out.println("-2-"+resources.getName());
          HibernateSessionFactory.closeSession();
          }


          posted on 2010-03-14 17:45 王總兵 閱讀(183) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 张北县| 泰安市| 泾阳县| 诸暨市| 宣威市| 绥江县| 林周县| 大石桥市| 射阳县| 玉环县| 鄢陵县| 沭阳县| 读书| 香格里拉县| 卓尼县| 武汉市| 浮梁县| 赫章县| 铅山县| 白水县| 宣汉县| 西安市| 望城县| 庄浪县| 莱芜市| 安仁县| 上林县| 宝坻区| 东宁县| 宣城市| 锡林浩特市| 石门县| 汉川市| 临海市| 苏尼特右旗| 峡江县| 集安市| 古交市| 日土县| 诸暨市| 辽阳县|