码迷,mamicode.com
首页 > 其他好文 > 详细

二级缓存配置和原理

时间:2016-09-05 16:58:08      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

二级缓存是进程或集群范围内的缓存,可以被所有的Session共享

二级缓存是可配置的插件

技术分享

 

01.二级缓存的配置使用(ehcache缓存)

   *1.引入如下jar包。

      ehcache-1.2.3.jar  核心库

      backport-util-concurrent.jar

      commons-logging.jar

   *2.配置Hibernate.cfg.xml开启二级缓存

  

 <property name="hibernate.cache.use_second_level_cache">true</property>

 

  *3.配置二级缓存的供应商

<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

 

在大配置文件(hibernate.cfg.xml)中配置

 

<class-cache    usage="read-write" class="cn.happy.entity.Student"/>
<collection-cache usage="read-write" collection=""/>

 

二级缓存保存数据原理:

技术分享

 

 

二级缓存测试:

/**
     * 测试二级缓存
     */
        @Test
           public void testBulk(){
               //获取的数据一样   
               Session session = HibernateUtil.getSession();
               Transaction tx=session.beginTransaction();
               Dept dept = (Dept)session.get(Dept.class,1);
               System.out.println(dept.getDeptName());
               tx.commit();
               HibernateUtil.closeSession();

               System.out.println("===========================");
               
               //因为有二级缓存    所以 不显示SQL语句
               Session session2 = HibernateUtil.getSession();
               Transaction tx2=session2.beginTransaction();
               Dept dept2 = (Dept)session2.get(Dept.class,1);
               System.out.println(dept2.getDeptName());
               tx2.commit();
               HibernateUtil.closeSession();
            
           }

 

运行结果:

技术分享

因为有二级缓存,都是查询部门名称,所以第二次查询不显示SQL语句

 

测试查询缓存:

list()方法

/**
         * 测试查询缓存
         * 
         */
        @Test
        public void testCache(){
            session=HibernateUtil.getSession();
            Transaction tx=session.beginTransaction();
            Query query = session.createQuery("from Emp");
            
            //list()只能放数据   不能取出
            List<Emp> list = query.list();
            for (Emp emp : list) {
                System.out.println(emp.getEmpName());
            }
            System.out.println("================================");
            
            //不显示SQL:上一步已经放入        二级缓存
            List<Emp> list1 = query.list();
            for (Emp emp : list1) {
                System.out.println(emp.getEmpName());
            }
            
            System.out.println("================================");
    
         }

运行结果

技术分享

首先放入数据,list()方法只能放入数据,不能取出数据,所以当运行查询语句,显示了两条SQL语句,这说明了ist()方法只能放入数据,不能取出数据,内存地址不同,所以显示两条SQL语句

 

 iterate()方法

技术分享

运行结果:

 技术分享

iterate()方法可以取出数据,运行查询语句,显示两条SQL,但是这两条SQL是不一样的,印证了iterate()方法可以取出数据

 

二级缓存配置和原理

标签:

原文地址:http://www.cnblogs.com/qingzhi/p/5842690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!