之前项目中不多去管缓存问题,但为了提升效率又不得不去考虑。对这方面不是太熟悉,因此今天下午特地的去学了一下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>
.......