zoukankan      html  css  js  c++  java
  • day37 02-Hibernate二级缓存:二级缓存的散装数据

    一级缓存存放的是对象的地址。把对象的地址缓存下来了。二级缓存里面存放的是对象的散装数据。你再去获取的时候,因为一级缓存的生命周期结束了,它会从二级缓存中获取。从二级缓存中获取,因为它又会得到一个对象。它会把二级缓存中的散装数据拿出来重新组装成一个Customer对象。它相当于是这里又Custoerm c2 = new Customer();然后又调用c2.setCid(),c2.setCname(),c2.setAge()把id,name和age装进来。所以customer3和customer1得出来的地址肯定不一样嘛。因为customer3是一个新的对象了,跟custoemr1对象的地址又不一样了。所以二级缓存里面缓存的是对象的散装数据。

        @SuppressWarnings("unused")
        @Test
        // 配置二级缓存的情况
        public void demo2(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            Customer customer1 = (Customer) session.get(Customer.class, 1);// 发送SQL.
            
            Customer customer2 = (Customer) session.get(Customer.class, 1);// 不发送SQL.
            
            System.out.println(customer1 == customer2);
            
            tx.commit();//
            
            session = HibernateUtils.getCurrentSession();
            tx = session.beginTransaction();
            
            Customer customer3 = (Customer) session.get(Customer.class, 1);// 不发送SQL. 虽然是从二级缓存里获取的一个数据同时它也会往一级缓存里面放
            //因为上一个一级缓存已经结束了,这是另一个session的一级缓存了。所以customer4肯定是从一级缓存获取的
            Customer customer4 = (Customer) session.get(Customer.class, 1);// 不发送SQL.
            
            System.out.println(customer3 == customer4);//customer3和customer4肯定也是一样的
            System.out.println(customer1 == customer3);//Customer对象肯定是在二级缓存的类缓冲区里面的 那么二级缓存的类缓冲区是一个什么特点呢?二级缓存的类缓冲区卡里面存储的数据是
            //对象的散装数据  
            
            tx.commit();
        }
        
        
        @SuppressWarnings("unused")
        @Test
        // 没有配置二级缓存的情况
        public void demo1(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            Customer customer1 = (Customer) session.get(Customer.class, 1);// 发送SQL.
            
            Customer customer2 = (Customer) session.get(Customer.class, 1);// 不发送SQL.
            //一级缓存缓存的是对象的地址,cutoemr1和customer2指向的都是同一个地址
            System.out.println(customer1==customer2);
            
            tx.commit();
            
            session = HibernateUtils.getCurrentSession();
            tx = session.beginTransaction();
            
            Customer customer3 = (Customer) session.get(Customer.class, 1);// 发送SQL.
            
            
            tx.commit();
        }
    }
  • 相关阅读:
    接口和抽象的区别
    接口
    jquery Ajax提交表单数据
    SQL 检查 是否存在 表 临时表
    ASP.NET MVC 设置Area中 Controller 的方法 默认启动页
    json 序列化为数组
    C# Lamda中类似于SQL 中的 In 功能
    各种webservice调用地址
    ASP.NET获取客户端IP地址
    C#反射机制 Type类型
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6705680.html
Copyright © 2011-2022 走看看