一、Session概述
1.Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载Java 对象的方法.
2.理解Session的缓存
使用缓存的目的:尽量减少访问数据库的频率
(1)在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期
(2)当session的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中。当试图load()对象时,会判断缓存中是否存在该对象,有则返回。没有在查询数据库
3.清理缓存
Session 具有一个缓存, 位于缓存中的对象称为持久化对象, 它和数据库中的相关记录对应. Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句, 来同步更新数据库, 这一过程被称为清理缓存(flush)
4.默认情况下 Session 在以下时间点清理缓存:
(1)当应用程序调用 Transaction 的 commit()方法的时, 该方法先清理缓存(session.flush()),然后在向数据库提交事务(tx.commit())
(2)当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先清理缓存,以保证查询结果能够反映持久化对象的最新状态
(3)显式调用 Session 的 flush() 方法.
5.flush/commit/refresh/clear四种方法的区别
flush: 进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步 执行一些列sql语句,但不提交事务,;
commit:先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。
reresh:刷新,让session和数据库同步,执行查询,把数据库的最新信息显示出来,更新本地缓存的对象状态.
clear:清空缓存,等价于list.removeAll();
二、一级缓存
1.与二级缓存不同的是,hibernate已经内部实现了一级缓存
2.研究一级缓存需要研究的几个问题
(1)一级缓存的生命周期:随着session的创建而被创建,随着session的关闭而消失
(2)一级缓存是依赖于谁存在的:session对象
(3)怎么样把数据存放到一级缓存中:、
(4)怎么样从给一级缓存中获取数据
(5)怎么样把缓存中的数据同步到数据库
(6)怎么样吧数据库中的数据同步到一级缓存中
(7)一级缓存的特性
(8)从一级缓存中清除某个对象
(9)清空一级缓存中所有的数据。
3.