一级缓存存放的是对象的地址。把对象的地址缓存下来了。二级缓存里面存放的是对象的散装数据。你再去获取的时候,因为一级缓存的生命周期结束了,它会从二级缓存中获取。从二级缓存中获取,因为它又会得到一个对象。它会把二级缓存中的散装数据拿出来重新组装成一个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();
}
}

最新文章

  1. 影响postgresql性能的几个重要参数
  2. Odoo误删除服务产品造成的错误解决办法
  3. Redis 数据持久化(一)
  4. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
  5. "ORA-12154: TNS:could not resolve the connect identifier specified"的解决办法
  6. hdu 4631 Sad Love Story
  7. C++中的虚函数(类的向上转换,和向下转换)
  8. Castle框架中的IOC和AOP机制
  9. Computer Vision Algorithm Implementations
  10. 001Spark文件分析测试
  11. 微服务架构 - 解决Docker-Compose服务编排启动顺序问题
  12. python tricks
  13. FreeRTOS队列
  14. LOJ6282 数列分块入门6(分块+暴力)
  15. advanced ip scanner —— 局域网下 ip 及设备的扫描
  16. js 实现滚动字幕
  17. 20. Valid Parentheses (Stack)
  18. HAProxy压测及参数调优
  19. Grunt经常使用插件及演示样例说明
  20. 使用 Mirantis Fuel9.0 部署 OpenStack M

热门文章

  1. go语言基本运算符
  2. linux ssh密钥认证, 免密码登陆
  3. 滚动字幕标记<marquee></marquee>
  4. day 45 前端CSS
  5. 02_springmvc处理器映射器和适配器(补充)
  6. At- Linux必学的60个命令
  7. python基础-三元表达式/列表推导式/生成器表达式
  8. [欧拉路]CF1152E Neko and Flashback
  9. select有条件in要按照in中的数据排序
  10. (转)nodejs