关于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>

        .......

相关文章
相关标签/搜索