zoukankan      html  css  js  c++  java
  • Mybatis二级缓存问题

    一、缓存介绍。

    Mybatis提供了缓存服务,以减缓数据库压力;

    Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图: 

     

      1、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

      2、二级缓存是Mapper(namespace)级别的缓存。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    二、一级缓存

    三、二级缓存。

      

      二级缓存的颗粒度是Mapper级别;

      

    四、二级缓存问题。

      问题:当查询student表与teacher联表查询,第一次查询出来并缓存到二级缓存中,现在更新teacher表,再次查询student表与teacher联表,调取二级缓存,发现刚才更新的数据并未更新;

      解决方法:当BMapper执行对BTable的update操作时,指定刷新 ACache中的 selectATableWithJoin语句产生的缓存;mybatis-enhanced-cache 插件就是解决这个问题的。

  • 相关阅读:
    C语言左移和右移
    mmap详谈
    eclipse插件自动生成类图
    async 和 defer 的区别
    SVN里恢复到某一天的版本操作
    解决跨域的jsonp+Java实例
    HTTP请求行、请求头、请求体等
    ajax在什么情况下会走success和error
    记阅读POST与GET的区别
    记一些快捷键
  • 原文地址:https://www.cnblogs.com/jiangbaoyabo/p/15193873.html
Copyright © 2011-2022 走看看