Hibernate的一级缓存session缓存

    缓存:

             缓存其实就是一块内存,而我们知道的变量,数组,集合都是可以存数据的内存,所以说缓存可以是数组或者集合。

session的缓存:

               session是一个对象,他里面维护了一个集合,所以说session有缓存的功能。

              例:class Demo{

               List list = new ArrayList();

}

           对于这个类不难看出来 ,这个类里面维护了一个list集合,所有它有缓存功能。

          缓存功能就是将数据保存在保存在内存的功能。

Session的内部结构

     session的内部有两部分,一部分是缓存区,一部分是快照区。缓存区是存放用户操作的数据的,快照区负责将数据的最终结果同步到数据库中。如下图:

Hibernate的一级缓存session缓存

        当我们查询数据库中得到一条数据的时候,查询到的结果User对象,session会自动在自己的集合中保存一份,即就是我们缓存区的数据,而session的快照区此时也将此数据备份了一份。

         此时我们做一个修改操作:将User对象的name属性修改为亲动励2,那么此时缓存区的name属性的数据也会更新成亲动励2

         那么当执行clear方法时,它的功能时将缓存区的数据清空,所以执行clear方法之后缓存区就没有数据了,那么在事务提交的时候session会自动比较缓存区和快照区中的数据,如果数据一样没有变化,那么就直接提交,不用修改数据库,但是如果发现缓存区和快照区的数据不一样,那么它就会先将快照区的数据修改成和缓存区的数据一样,然后再将快照区的数据同步到数据库,所以执行完clear方法之后再提交事务缓存区和快照区最后都是没有数据的,所以数据无法同步到。