和大多数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. Croc Champ 2013 - Round 2 C. Cube Problem

    问满足a^3 + b^3 + c^3 + n = (a+b+c)^3 的 (a,b,c)的个数 可化简为 n = 3*(a + b) (a + c) (b + c) 于是 n / 3 = (a + b ...

  2. T1077 多源最短路 codevs

    http://codevs.cn/problem/1077/ 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 已知n个点(n&l ...

  3. Currency Exchange(最短路)

    poj—— 1860 Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 29851   Ac ...

  4. Object源码

    1.Object是所有类的父类,默认会继承Object. 2.Object类中常用的方法有:getClass().hashCode().equals().clone().toString().fina ...

  5. winform客户端程序实时读写app.config文件

    新接到需求,wcf客户端程序运行时,能实时修改程序的打印机名称: 使用XmlHelper读写 winform.exe.config文件修改后始终,不能实时读取出来,查询博客园,原来已有大神解释了: 获 ...

  6. Android 学习笔记---获取RadioGroup的选定值

    1,获取RadioGroup控件: RadioGroup radioGroup = (RadioGroup)findViewById(R.id.myRadioGroup); 2,获取RadioButt ...

  7. 【面试 spring】【第七篇】spring的问题

    1.spring你熟悉么?两大特色 spring 主要有IOC和AOP两大特色. =========================================================== ...

  8. [反汇编练习] 160个CrackMe之023

    [反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. 转: DNS 原理入门 (from 阮一峰)

    转自:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 原理入门   作者: 阮一峰 日期: 2016年6月16日 DNS 是互联网核心协议之一. ...

  10. 【LeetCode】Generate Parentheses 解题报告

    [题目] Given n pairs of parentheses, write a function to generate all combinations of well-formed pare ...