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();
        }
    }
  • 相关阅读:
    flask 需要下载的包
    flask知识点
    移动端网页实现(用百分比进行定位)
    js中的preventDefault
    网页重构面试笔试题
    J2EE课程设计的购物车代码(水平有限,仅供参考)
    JavaScript实现对象克隆函数clone( )的程序及分析
    WEB技术书籍推荐
    2016 Tianjin University Software Testing (lab2)
    Mac下安装npm 、node、ionic和cordova
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6705680.html
Copyright © 2011-2022 走看看