Mybatis一级缓存

文章目录

  • MyBatis缓存
    • 一级缓存命中场景
    • 一级缓存源码解析
    • 问题

MyBatis缓存

  • 二级缓存的生命周期与程序是一个级别的,除非程序挂掉,不然,二级缓存一只都在。
  • 一级缓存与会话绑定。
    Mybatis一级缓存_第1张图片

一级缓存命中场景

  • 默认情况下,一级缓存时直接打开的

Mybatis一级缓存_第2张图片

一级缓存源码解析

  • 执行器执行的时候,查看缓存,如果缓存中没有,就去数据库中找,并且设置缓存
  • BaseExecutor中出现update(),rollback(),falushCache(),commit(),LocalCacheScope()时,就会调用clearLocalCache()方法来清空缓存。

Mybatis一级缓存_第3张图片

问题

  • spring集成mybatis,为什么会造成一级缓存失效?
  1. mybatis会把sqlSession关闭了,所以每次查询都会创建新的sqlSession,所以一级缓存根本不生效
  2. 又一个私有的内部类实现了InvocationHandlerSqlSessionTemplateDefaultSqlSession的增强类,里面不直接调用CURD方法,而是通过一个代理对象,增强了所调用的方法,并且做了扩展。

Mybatis一级缓存_第4张图片

  • 会话之外更新数据怎么办?

Mybatis一级缓存_第5张图片

Mybatis一级缓存_第6张图片

你可能感兴趣的:(数据库相关)