和大多数ORM框架一样,为了尽可能减少数据库的访问,MyBatis设计支持缓存功能。设计上通过Cache接口提供SPI(服务提供接口),可以让第三方缓存提供具体的缓存实现,比如使用ehcache、Redis等,通过这些常用环境提供的实现类,即可将其配置成MyBatis中使用的缓存。

除了给第三方缓存提供SPI接口外,MyBatis自身也通过HashMap做了简单的缓存实现。总体上MyBatis缓存设计分为一级缓存和二级缓存。

MyBatis一级缓存是SqlSession级别的本地缓存,默认开启不支持配置,缓存生命周期与SqlSession生命周期相同,一级缓存只是简单的实现,没考虑SQLSession对象查询数据太多导致缓存HashMap太大而导致OOM,也没有更新缓存和缓存过期的概念,不过一般SqlSession对象的生存时间很短,且增删改时都会清空缓存数据,所以MyBatis最初这样设计。

MyBatis二级缓存是Mapper命名空间的缓存,支持跨多个Sqlsession对象使用,需要在Mapper xml文件中配置开启,并可指定使用第三方缓存或自定义缓存。在开启二级缓存的情况下可配置单条select语句是否缓存,也可配置单条增、删、改语句是否刷新缓存。MyBatis二级缓存默认最近最少使用规则淘汰历史数据。无法处理一批记录中单条记录更新的问题(一批记录缓存后因为其中单条记录修改而要清空缓存重新加载)。

《深入理解mybatis原理》 MyBatis缓存机制的设计与实

MyBatis的一级缓存实现详解 及使用注意事项

MyBatis的二级缓存的设计原理

MyBatis缓存设计的更多相关文章

  1. mybatis缓存的设计

    继续用提问的方式来看Mybatis的缓存设计. 1.Mybatis如何开启缓存 Mybatis对查询结果进行缓存,所以缓存的对象为具体的Statement 通过在Statement上是否使用缓存来启用 ...

  2. 《深入理解mybatis原理4》 MyBatis缓存机制的设计与实现

    <深入理解mybatis原理> MyBatis缓存机制的设计与实现 本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存 ...

  3. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现

    本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论. MyBatis将数据缓存设计成两级结构,分为一级缓存 ...

  4. mybatis深入理解(七)-----MyBatis缓存机制的设计与实现

    缓存设计 MyBatis将数据缓存设计成两级结构,分为一级缓存.二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存.一级缓存是 ...

  5. mybatis缓存源码分析之浅谈缓存设计

    本文是关于mybatis缓存模块设计的读后感,关于缓存的思考,关于mybatis的缓存源码详细分析在另一篇文章:https://www.cnblogs.com/gmt-hao/p/12448896.h ...

  6. 《深入了解mybatis原则》 MyBatis架构设计和案例研究

    MyBatis这是现在很流行ORM框架,这是非常强大.事实上现却比較简单.优雅. 本文主要讲述MyBatis的架构设计思路,而且讨论MyBatis的几个核心部件.然后结合一个select查询实例.深入 ...

  7. Mybatis:缓存,动态SQL,注解SQL以及动态标签使用

    1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 &a ...

  8. Mybatis 缓存分析

    其实本来不想专门的写一篇关于mybatis缓存的博客的.在之前的博客中已经大致的把mybatis的整体流程讲了一遍.只要按照步骤一步步的点进去,关于缓存的代码很容易就能发现.但是今天在看代码的时候突然 ...

  9. mybatis缓存机制

    目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...

随机推荐

  1. Codeforces Round #321 (Div. 2) E

    终于补好了. 题目链接: http://codeforces.com/contest/580/problem/E E. Kefa and Watch time limit per test 1 sec ...

  2. 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)

    原文:http://www.open-open.com/code/view/1446195787257 package cn.outofmemory.codes.Date; import java.u ...

  3. UItableView 所有内容保存为图片

    将所有的UITableView保存为图片,因为UITableView只能保存显示当前,所以,就单个保存后,合并为一张图片 代码如下: -(IBAction)savePic:(id)sender { / ...

  4. 【Spring boot】【gradle】idea新建spring boot+gradle项目

    在此之前,安装了idea/jdk/gradle在本地 ===================================== gradle怎么安装:http://www.cnblogs.com/s ...

  5. weblogic内存调整说明

    一:WebLogic配置问题:  由于WebLogic的配置问题,我们的测试出现了失败情况.原因是为WebLogic分配的内存太少了.通过修改commom\bin\commEnv.cmd文件来增加内存 ...

  6. wc递归统计代码行数

    find /path -name '*.cpp' |xargs wc -l

  7. 制作ubuntu U盘安装盘

    sudo dd if=ubuntu.iso of=/dev/sdb2 sudo syslinux /dev/sdb1

  8. Solidedge如何修改特征的参数

    我已经长出了60MM,现在发现不对,要改成50MM.右击这个特征,点击编辑定义   直接左键单击尺寸,修改数据,按回车,鼠标右键,即可.    

  9. html中&lt;li&gt;&lt;/li&gt;中使用&lt;br&gt;和&lt;li&gt;&lt;/li&gt;外面使用&lt;br&gt;

    </pre><pre> <!DOCTYPE html> <html> <head> <meta http-equiv="Co ...

  10. react 实现pure render的时候,bind(this)隐患

    react 实现pure render的时候,bind(this)隐患 export default class Parent extends Component { ... render() { c ...