關於hibernate中查詢緩存的學習

       之前項目中不多去管緩存問題,但爲了提升效率又不得不去考慮。對這方面不是太熟悉,因此今天下午特地的去學了一下hibernate中查詢緩存的實現。 spring

       實現以下: sql

        一,在hibernate.cfg.xml配置文件中配置hibernate.cache.use_query_cache屬性 數據庫

           <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> 緩存

           <property name="hibernate.cache.use_query_cache">true</property>  session

        二,在Dao類使用的方法中設置 ide

        public List<Object[]> getInfo(){
            String hql=" from Table";
            List<Object[]> list = this.getHibernateTemplate().find(hql);
            this.getHibernateTemplate().setCacheQueries(true);//設爲查詢緩存
            this.getHibernateTemplate().setQueryCacheRegion("c1");//設置查詢緩存區域,清除查詢緩存時用
            if(list!= null){
                if(list.size()>0) return list;
            }
            return null;
        } 測試

        三,在編輯方法中清除查詢緩存 this

        public void update(Object obj){
           this.getHibernateTemplate().update(obj);
           this.getHibernateTemplate().getSessionFactory().evictQueries("c1");//在編輯對象時清除查詢緩存,若是不清除的話,調用getInfo()方法就不會更新仍是原來的數據。c1就是上面設置時設置的查詢緩存區域。
        } hibernate

    今天暫時也就學了這麼多,可能表達不夠清晰,但我在本地測試是沒問題的,也就是說,若是設置了查詢緩存,調用時,只在第一次調用生成一條sql語句(hibernate.cfg.xml配置文件中配置了show_sql爲true),而後繼續調用的話,就不會生成sql語句了,也就是說沒有去查詢數據庫了,而後,編輯時,將查詢緩存清除,再調用時又會從新去數據庫中查詢,也就又生成一條sql語句。只要用對地方,應該是能提升查詢效率的,使用場景適合查詢多,編輯少處。   orm

   --2013-04-12--增

    spring中配置hibernate的查詢緩存問題,有些人可能沒用hibernate中的hibernate.cfg.xml文件。直接在spring中配置,今天就遇到了這個問題。配置以下:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource"><ref local="dataSource" /></property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
                    <prop key="hibernate.cache.use_query_cache">true</prop>
                </props>
            </property>

        .......

相關文章
相關標籤/搜索