zoukankan      html  css  js  c++  java
  • MyBatis--一级二级缓存

    一.一级二级缓存

    注意点:
    • mybatis和spring整合,一级缓存会失效
      • 原因: mybatis和spring结合使用的时候,将原本的DefaultSqlSession替换成了SqlSessionTemplate,并且在SqlSessionTemplate将sqlSession替换成了代理对象,当我们执行sqlSession.selectList方法的时候会调用到SqlSessionInterceptor的invoke方法, 在invoke方法的fianlly中调用了SqlSessionUtils.closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory)方法,会将我们的session关闭了。而一旦session关闭了,那一级缓存自然也就失效了。

    二.一级缓存

     
     
    一级缓存,一级缓存是SqlSession级别的缓存
    说明:
    • 必须在同一个sqlSession对象中,分别两次查询同一个数据,在第一次查询时,会先去数据库查询,并将数据缓存到一级缓存中
    • 第二次去查询时,就不再去数据库中查询,直接去一级缓存中获取
    注意点:
    • 必须在同一个sqlSession
    • 多次相同的查询sql语句会直接执行一级缓存
    • 执行任意增删改操作,会清空一级缓存
    • 执行commit提交方法,也会清空一级缓存
    • MyBatis默认开启一级缓存
    延申:
    • 为什么增删改sql会清空一级缓存??
      • 为了保证缓存和数据库数据同步,不会出现脏数据的问题
    • 缓存优先级??
      • 二级缓存 --> 一级缓存 --> 数据库

    三.二级缓存

     
    二级缓存,二级缓存是Mapper级别的缓存
    说明:
    • 多个SqlSession去操作同一个Mapper的sql语句(也就是要保证多个SqlSession操作的mapper映射文件的namespace是相同的),
    • 那么多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
    注意点:
    • MyBatis需要手动开启二级缓存
    • 必须保证多个SqlSession操作的mapper的mapper映射文件是相同的
    • 执行任意增删改操作,会清空二级缓存
    • 执行commit提交方法,也会清空二级缓存
    延申:
    • 首先 全局配置文件 mybatis-configuration.xml 文件中
    1 <!--开启二级缓存  -->
    2 <settings>
    3     <setting name="cacheEnabled" value="true"/>
    4 </settings>
    • 其次 UserMapper.xml 文件中开启缓存
    1 <!-- 开启二级缓存 -->
    2 <cache></cache>
     

  • 相关阅读:
    Top 10 Product Manager Skills To Boost Your Resume In 2021
    大数据知识梳理
    B端产品如何设计权限系统?
    华三盒式交换机MAC、ARP、Route性能表项参数查询
    中了传说中的挖矿病毒
    SqlServer 2019 事务日志传送
    docker中生成的pdf中文是方框的解决方案
    The Live Editor is unable to run in the current system configuration
    2021 面试题大纲
    五分钟搞定Docker安装ElasticSearch
  • 原文地址:https://www.cnblogs.com/bin563597293/p/14363359.html
Copyright © 2011-2022 走看看