zoukankan      html  css  js  c++  java
  • 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()方法

     

  • 相关阅读:
    首页调单个产品分类的推荐产品,最新产品和热卖商品
    ecshop模板<! TemplateBeginEditable name="左上角主区域" >用法
    复制DataTable数据到新DataTable
    定时任务时间与当前时间比较的方法
    批量删除文件夹下包含指定字段的文件
    SQL 字符串去除空格函数
    Javascript的IE和Firefox(火狐)兼容性的常用例子
    查询表某列的加权平均值
    Jquery实现页面定时跳转
    Date.parse Firefox返回Nan的解决办法
  • 原文地址:https://www.cnblogs.com/yz-bky/p/12575951.html
Copyright © 2011-2022 走看看