MyBatis一级缓存和二级缓存

10.1 缓存介绍:
缓存就是内存中的一个对象,用于对数据库查询结果的保存.好处减少与数据库
交互次数提高响应速度.

10.2 什么是会话
会话就是一次完整的交流.在一次完整交流过程中往往包含多次请求响应.
而发送请求都是同一个用户.SqlSession就是在用户与数据库进行一次会话过程中使用的接口.
10.3 MyBatis缓存分类

  1. 一级缓存:
    也称为[本地缓存],用于保存用户在一次会话过程中查询的结果.用户一次会话中
    只能使用一个SqlSession.一级缓存是自动开启,不允许关闭
  2. 二级缓存:
    也称为[全局缓存],是针对某一个表的查询结果存储.可以共享给所有针对这张表查询的用户,也就是说可以在多个SqlSession之间共享.
    10.4 一级缓存失效原因:
  3. 用户在一次会话过程中使用了多个SqlSession
  4. 用户在会话中使用同一个SqlSession,但是查询条件发生了变化
  5. 用户在会话中使用同一个SqlSession,但是清理了缓存
  6. 用户在会话中使用同一个SqlSession,但是在两次查询之间对数据库进行了修改

10.5 二级缓存开启设置

  1. 需要在MyBatis核心配置文件,通过settings标签开发二级缓存.


    image.png
  2. 在对应Mapper文件中添加


    MyBatis一级缓存和二级缓存_第1张图片
    image.png
  3. 设置标签属性


    MyBatis一级缓存和二级缓存_第2张图片
    image.png
  4. 设置对应的实体类实现序列化接口

MyBatis一级缓存和二级缓存_第3张图片
image.png

一。myBatis框架中缓存分类:

 一级缓存:

      [会话缓存]。在当前用户访问数据库期间,所有的查询结果都会自动
      保存起来。用户可以使用SqlSession从一级缓存中进行读取。
      而其他用户的SqlSession是不能读取当前用户的一级缓存
       一级缓存自动开启,开发人员是不能关闭一级缓存



 二级缓存:

     【全局缓存】,
      1.二级缓存针对某一个表来设置的共享缓存
      2.如果一个SqlSession对象将要被销毁时,MyBatis框架
        自动将这个SqlSession中与当前表关联的数据存放到这个共享缓存中.
      3.那么此时其他SqlSession如果需要得到相同的数据,就可以到共享缓存中
        读取

      4.由于二级缓存对于服务端内存消耗较大,因此MyBatis框架是不会主动
       开发二级缓存,需要开发人员手动开启二级。

二。一级缓存失效原因:

  1.同一个用户,使用两个SqlSession,是看不到一级缓存工作。

  2.在一个SqlSession,使用查询条件不同,也会导致一级缓存失效

               select * from dept where deptno=10    结果1
               select * from dept where deptno=20    结果2

  3.在一个SqlSession使用相同查询条件此时在查询之间进行数据修改操作导致一级缓存刷新(清空)

  4.在一个SqlSession使用相同查询条件此时手动刷新缓存时导致一级缓存失败

三。与MyBatis中【一级缓存】和【二级缓存】关联的属性

  1.全句变量:核心配置文件

            
                  
           

           1)cacheEnabled[默认值就是true]: 表示开启二级缓存
           2)cacheEnabled=false,         关闭二级缓存。一级缓存依然存在

 2.useCache: mapper.xml 会在

           1)useCache只出现在