之前項目中不多去管緩存問題,但爲了提升效率又不得不去考慮。對這方面不是太熟悉,因此今天下午特地的去學了一下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>
.......