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

来源:互联网 发布:mac怎么拷贝到移动硬盘 编辑:程序博客网 时间:2024/06/02 05:56

一、Hibernate的一级缓存

1、缓存的概念:

        内存中的临时数据

2、使用缓存的好处:

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

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

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

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

4、证明hibernate一级缓存存在

/** * 证明一级缓存确实存在 *  * 明确: * 一级缓存指的是Session对象的缓存 *  * 一级缓存指的就是Session对象中定义的一些集合。 */@Testpublic 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、快照机制的代码体现

/** * 快照机制 * 它的作用就是,用于缓存数据和数据库进行同步。保证数据一致。 * 为了减少和数据库交互的次数,从而对一级缓存对象进行了拷贝。 */@Testpublic 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、三种状态互相转换的图解


原创粉丝点击