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 插件就是解决这个问题的。

  • 相关阅读:
    noteOneForGephi
    麻省理工学院公开课:计算机科学及编程导论
    数据存储之归档
    UITableViewController之聊天窗口
    UI基础之UIScrollView
    UI基础之网易新闻demo小项目
    UI基础之UITableViewController
    UI基础之UINavigationController
    UITabBarController
    UIScrollView
  • 原文地址:https://www.cnblogs.com/jiangbaoyabo/p/15193873.html
Copyright © 2011-2022 走看看