03-Hibernate的Session缓存(一级缓存)
Session缓存
在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存。只要 Session 实例没有结束生命周期,且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期。
Session 缓存可减少 Hibernate 应用程序访问数据库的频率。
利用反射查询对象:
@Test
public void testCache(){
News news = session.get(News.class, 1);
System.out.println(news );
News news2 = session.get(News.class, 1);
System.out.println(news2);
System.out.println(news==news2);
}
结果如下:
两次获取News对象,只发送了一条查询语句。这就是Session缓存,也就是一级缓存。位于缓存中的数据叫做持久化对象。
站在持久化角度,Hibernate将缓存分了4种状态:持久化、临时、游离、删除。
Session有3个缓存方法:
1、flush()方法
作用:使数据表中的记录和session缓存中的对象的状态保持一致,会发送对应的SQL语句,但不会提交事务。
为了确保数据一致,在以下会调用flush()方法:
1)显示的调用。session.flush();
2)事务提交的时候,会先调用flush(),然后再提交事务。
3)执行HQL或QBC查询。
4)若记录的ID是native(底层数据库自增的形式)生成的,在调用save()方法后,立即发送insert语句。
2、refresh()方法
作用:会强制发送SELECT语句,以使session缓存中对象的状态和数据表中对应的记录保持一致。
打上断点,debug测试:
修改数据库中的数据:Php——>Java
得到的结果还是一样,而且也没有强制发送SQL语句。
使用了refresh()方法后:
在Hibernate中设置隔离级别:
mysql的默认隔离级别是REPEATABLE READ,Oracle的默认隔离级别是READ COMMITED。
JDBC 数据库连接使用数据库系统默认的隔离级别. 在 Hibernate 的配置文件中可以显式的设置隔离级别. 每一个隔离级别都对应一个整数:
- READ UNCOMMITED
- READ COMMITED
- REPEATABLE READ
- SERIALIZEABLE
Hibernate 通过为 Hibernate 映射文件指定 hibernate.connection.isolation 属性来设置事务的隔离级别
。
3、clear()
作用:清除缓存。
上一篇: 当前页面截图
下一篇: 李世民本可以安度晚年,他是怎么去世的?