Hibernate一级缓存

什么是缓存:将数据提前存放到内存中的某一个位置,当再次使用的时候,可以直接从内存里获取

缓存的好处:提升程序的运行效率,缓存技术是Hibernate的优化手段

Hibernate分成两个基本的缓存

  1,一级缓存:session级别的缓存,一级缓存与session的生命周期一致,自带的

  2,二级缓存:sessionfactory级别的缓存,不是自带的

证明缓存的存在:

  因为查询的是同一条记录   当第一次查询出来的时候数据就被hibernate储存到了一级缓存里

  当第二次查询时就不需要去执行sql语句到数据库查询了,直接获取缓存里的

实例代码:

 

理解一级缓存

  在session接口的实现中包含一系列的java的集合,这些Java集合构成了session的缓存

  只要session实例没有结束生命周期,存放在它缓存的对象也不会结束生命周期

  当session对象的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序不调用该对象,只要缓存不清空,该对象仍处于生命周期中

  当试图get(),load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库,没有再查询数据库

 

  Session能够在某些时间点,按照缓存中对象的变化来执行相关的sql语句,来同步更新数据库,这一过程被称为刷出缓存(flush)

  默认情况下Session在以下时间点刷出缓存:

  当程序调用Transaction的commit()方法时,该方法先输出缓存,然后再向数据库提交事务

 

  当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态

 

  调用Session的flush()方法 

    持久化对象有自动更新数据库的功能能自动更新的原因是:依赖Hibernate的一级缓存

  Hibernate向一级缓存中存入数据的同时,还会复制一份数据库存入Hibernate快照中,当调用commit()方法时,会清理一级缓存中的数据操作

  同时会检查一级缓存中的数据和快照区的数据是否相同,如果不同则会执行update()方法,将一级缓存的数据同步到数据库中,并更新快照区

  反正,则不会执行update()方法

 

 

posted @ 2020-03-26 17:51  拯代码  阅读(119)  评论(0编辑  收藏  举报