学习笔记—Mybatis中的缓存

Mybatis中的缓存

  • 什么是缓存
    • 缓存就是存在于内存中的临时数据。
  • 使用缓存的好处
    • 减少和数据库的交互次数,提高执行效率
  • 什么数据适用缓存
    • 适用于缓存:
      • 经常查询并且不经常改变的。
      • 数据的正确与否对结果影响不大的。
    • 不适用于缓存:
      • 经常改变的数据。
      • 数据的正确与否对最终结果影响很大的;例如:商品的库存,银行的汇率,股市的牌价。

Mybatis中的一级缓存和二级缓存

  • 一级缓存:
    • 它指的是Mybatis中SqlSession对象的缓存。当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
      该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中。
      查询是否有,有的话直接拿出来用。
      当SqlSession对象消失时,mybatis的一级缓存也就消失了。
      当SqlSession调用了增、删、改的方法时,mybatis的一级缓存会被清空,再次查询时,mybatis重新从数据库中
      查询并存入缓存。
  • 二级缓存:
    • 它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
      开启二级缓存的使用步骤:
      (1)使用配置文件的情况:
      第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)在这里插入图片描述
      第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)在这里插入图片描述
      第三步:让当前的操作支持二级缓存(在select标签中配置)在这里插入图片描述(2)使用注解的情况:
      第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)在这里插入图片描述第二步:添加注解@CacheNamespace(blocking = true)(在IUserDao中添加)
      在这里插入图片描述

      二级缓存结构图
      二级缓存结构图首先开启 mybatis 的二级缓存。
      sqlSession1 去查询用户信息,查询到用户信息会将查询数据存储到二级缓存中。
      sqlSession2 去查询与 sqlSession1 相同的用户信息,首先会去缓存中找是否存在数据,如果存在直接从缓存中取出数据。
      如果 SqlSession3 去执行相同 mapper 映射下 sql,执行 commit 提交,将会清空该 mapper 映射下的二级缓存区域的数据。

注意:二级缓存中存放的是数据而非对象,当sqlSession去缓存中找,找是否存在数据,如果存在则直接从缓存中取出数据来创建一个对象返回。

猜你喜欢

转载自blog.csdn.net/qq_44830363/article/details/105359507