欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HIbernate 缓存(待补充)

程序员文章站 2022-05-12 16:35:09
...

Hibernate 缓存的引出

Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。

Hibernate 缓存的一级缓存

Hibernate 如何缓存的效果

Hibernate一级缓存又被成为“Session的缓存”。Session缓存是内置的,不能被卸载,是事务范围的缓存。在一级缓存中,持久化类的每个实例都具有唯一的OID。

           Configuration con = new Configuration().configure();
           SessionFactory sf = con.buildSessionFactory();
           Session ss = sf.openSession();
           Transaction tt = ss.beginTransaction();
           News n1 = ss.load(News.class, 1);
           News n2 = ss.load(News.class, 2);
           tt.commit();
           ss.close();
           sf.close();

在这段代码中,我们对我们调用两次load 方法,可以看后台打印的SQL语句,可以发现,就是select 语句 只有一句,这实际上就使用了缓存。实际上,第一次Session 加载对象的时候,它就存放被当前工作单元中加载的对象,也就是News这个对象对应表的数据。(这里涉及数据库的快照,这里我们就简单理解)(注意这个只是针对于查询,如果是插入、删除还是需要执行相应的SQL语句的)。

你需要记住的事,平常我们save、load的操作都是在session中,并不是真正的操作数据库。

Hibernate 何时清除缓存
  1. commit() 方法被调用时 。
  2. 显示的调用session 的 flush方法。

只有清除缓存,才是将数据真正的写入到数据库中。

Session 加载对象后会为对象值类型的属性复制一份快照。当Session 清理缓存时,比较当前对象和它的快照就可以知道那些属性发生了变化,进行相应的修改。

Hibernate 二级缓存

参考学习

参考学习