Hibernate学习笔记 -- day05 缓存、快照机制、对象状态

一、Hibernate的一级缓存

1、缓存的概念:

        内存中的临时数据

2、使用缓存的好处:

        可以减少和数据库的交互次数,在需要使用数据时,先去缓存中看看有没有,有就直接用,没有,再去查询数据库。

3、什么样的数据适用缓存:

        经常查询,不经常修改的数据

        数据的对错,对最终结果影响不大的

4、证明hibernate一级缓存存在

	/**
	 * 证明一级缓存确实存在
	 * 
	 * 明确:
	 * 	一级缓存指的是Session对象的缓存
	 * 
	 * 一级缓存指的就是Session对象中定义的一些集合。
	 */
	@Test
	public void test1(){
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		//首次查询
		Customer c = s.get(Customer.class, 1L);//此时会去数据库中查询,把查询出来对象存入了一级缓存
		System.out.println(c);//输出
		
		//再次查询
		Customer c2 = s.get(Customer.class, 1L);//没有去查询,拿1L去一级缓存中查找,找到后就返回了。
		System.out.println(c2);//输出
		
		tx.commit();
		s.close();//一级缓存就消失了
	}

5、缓存机制的简单图解


二、Hibernate的快照机制

1、什么是快照机制

        它的作用就是,用于缓存数据和数据库进行同步。保证数据一致。

        为了减少和数据库交互的次数,从而对一级缓存对象进行了拷贝。

2、快照机制的代码体现

	/**
	 * 快照机制
	 * 	它的作用就是,用于缓存数据和数据库进行同步。保证数据一致。
	 * 	为了减少和数据库交互的次数,从而对一级缓存对象进行了拷贝。
	 */
	@Test
	public void test2(){
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		//根据id查询一个对象
		Customer c = s.get(Customer.class, 1L);//会去查询,还会存入一级缓存
		System.out.println(c.getCustName());//TBD云集中心
		//修改客户名称
		c.setCustName("黑马程序员");
		System.out.println(c.getCustName());//黑马程序员
		tx.commit();
		s.close();
		
		//到此行的时候客户对象还能不能用?		可以使用
		System.out.println(c.getCustName());//TBD云集中心 | 黑马程序员
	}

3、快照机制的分析图解

三、Hibernate的对象状态

1、三种状态

瞬时态:没有OID,和session没有关系。多见于new出的对象

持久化状态:有OID,和session有关系。多见于从数据库中查询出来的对象

脱管状态:有OID,和session没有状态。

2、三种状态互相转换的图解


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值