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();
    }
}
day37 02-Hibernate二级缓存:二级缓存的散装数据的更多相关文章
- hibernate 5的二级缓存案例讲解
		hibernate 5的二级缓存案例讲解 本帖最后由 鱼丸儿 于 2018-1-20 11:44 编辑 大家好,今天来记录讲解一下磕磕绊绊的hibernate5 的二级缓存配置,一条路摸到黑 那么在这 ... 
- Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置
		------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录 1.二级缓存的具 ... 
- Hibernate的一级二级缓存机制配置与测试
		特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session ... 
- Hibernate中的一级缓存、二级缓存和懒加载(转)
		1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ... 
- Hibernate中的一级缓存、二级缓存和懒加载
		1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ... 
- hibernate 查询、二级缓存、连接池
		hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept = (Dept) session.get(Dept.class, 12); Dept dept = (Dep ... 
- 一级缓存二级缓存(hibernate)
		缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ... 
- Hibernate 再接触  一级缓存 二级缓存 查询缓存
		缓存 就是把本来应该放在硬盘里的东西放在内存里 将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的 (适合经常访问,数据量有限,改动不大) 很多的se ... 
- Hibernate笔记④--一级二级缓存、N+1问题、saveorupdate、实例代码
		一级缓存及二级缓存 一级缓存也是Session 缓存 一个链接用户的多次查询使用缓存 跨用户 则无缓存 hibernate自带的 get和load都会填充并利用一级缓存 二级缓 ... 
- 说说自己对hibernate一级、二级、查询、缓存的理解。
		说说自己对hibernate一级.二级.查询.缓存的理解. 2016-03-14 21:36 421人阅读 评论(0) 收藏 举报 分类: web开发(19) 版权声明:本文为博主原创文章,未经博 ... 
随机推荐
- 线性回归和梯度下降代码demo
			程序所用文件:https://files.cnblogs.com/files/henuliulei/%E5%9B%9E%E5%BD%92%E5%88%86%E7%B1%BB%E6%95%B0%E6%8 ... 
- pyQT Dialog默认选中某一个选项问题的解决
			方法一: 在新建ui文件时不要新建Dialog # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ... 
- vue2.0 使用webpack搭建项目遇到的最搞笑的坑
			报错如下: 源码: 然后找了半天没搞明白... 无意中翻看了一下ES6语法规则.. 然后我发现:源代码最后一行要空一行,我心想这什么狗屁规定?MMP 
- IOS学习笔记56-IOS7状态栏适配方法一
			近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,所以了,我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下 ... 
- laravel中如何使用Redis(Redis是什么)
			laravel中如何使用Redis(Redis是什么) 一.总结 一句话总结: 基于内存亦可持久化键值数据库 Redis是完全开源免费的,遵守BSD协议,是一个高性能的键值数据库.是当前最热门的的的N ... 
- Java之io nio aio 的区别
			这个问题最近面试总是遇到,作为一个只会写流水代码的程序员,一脸懵逼.看了网上的解释,看的还是很模糊,说下我对这个的理解. 先引出一个话题,两个大水缸,一个空一个满,让你把一个缸里面的水弄到另一个里面. ... 
- Django项目: 3.用户注册功能
			本章内容的补充知识点 导入库的良好顺序: 1.系统库 2.django库 3.自己定义的库(第三方库) redis缓存数据库的数据调用速度快,但是不利于长时间保存. mysql用于长时间存储,但是调用 ... 
- Maven编译资源文件拷贝
			<build> <finalName>op-balance-job-service</finalName> <plugins> <plugin&g ... 
- 堆,栈,内存管理, 拓展补充-Geekband
			8, 堆,栈,内存管理 栈: local objects 在离开作用域之后就会被消除. 堆: new MyClass 一直会存在 静态对象: static local object 作用域在 ... 
- pandas一些基本操作(DataFram和Series)_3
			import pandas as pd;import numpy as np#通过一维数组创建Chinese = np.array([89,87,86])print(Chinese)print(pd. ... 
