08.Hibernate的一级缓存-->>Session
Hibernate提供了两种缓存:
- 1.一级缓存:自带的不可卸载的,一级缓存的生命周期与Session一致,一级缓存成为Session级别的缓存
- 2.二级缓存:默认没有开启,需要手动配置才可以使用,二级缓存可以在多个Session中共享数据,二级缓存成为SessionFactory级别的缓存
Sesison对象的缓存概述:
- 1.将对象存入到一级缓存中,session生命周期没有结束,那么对象在session中存放着
- 2.内存中包含session的实例--->>>session的缓存(一些集合)--->>>集合包含的是缓存对象!
证明一级缓存的存在:
在同一个Session中两次查询,查看执行了哪些SQL语句
@Test public void m01(){ Session session = HibernateUtils.openSession(); Transaction tr = session.beginTransaction(); User user1 = session.get(User.class, 1L); System.out.println("-------------------------------"); User user2 = session.get(User.class, 1L); tr.commit(); session.close(); }
控制台显示:
只执行了一次查询语句,说明第一次查询之后 Hibernate将持久化对象存储在session中,再次执行就不用去数据库查询
Hibernate如何做到数据库与session进行同步更新操作
使用get()查询到一个User对象,然后设置user的一个属性,commit。
发现数据库中的该user属性也变化了(没有做update操作)
快照机制
@Test public void m02(){ Session session = HibernateUtils.openSession(); Transaction tr = session.beginTransaction(); User user = session.get(User.class, 3L); user.setAge(1); tr.commit(); session.close(); }
数据库变化:
===>>>
证明了快照的存在
session的一些方法
- session.clear(); --清空缓存
- session.evict(obj); --从缓存中清除指定对象
- session.flush(); --刷出缓存(在不commit得情况下和数据库同步)
Hands Up!