MyBatis缓存设计
和大多数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对查询结果进行缓存,所以缓存的对象为具体的Statement 通过在Statement上是否使用缓存来启用 ...
- 《深入理解mybatis原理4》 MyBatis缓存机制的设计与实现
<深入理解mybatis原理> MyBatis缓存机制的设计与实现 本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存 ...
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论. MyBatis将数据缓存设计成两级结构,分为一级缓存 ...
- mybatis深入理解(七)-----MyBatis缓存机制的设计与实现
缓存设计 MyBatis将数据缓存设计成两级结构,分为一级缓存.二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存.一级缓存是 ...
- mybatis缓存源码分析之浅谈缓存设计
本文是关于mybatis缓存模块设计的读后感,关于缓存的思考,关于mybatis的缓存源码详细分析在另一篇文章:https://www.cnblogs.com/gmt-hao/p/12448896.h ...
- 《深入了解mybatis原则》 MyBatis架构设计和案例研究
MyBatis这是现在很流行ORM框架,这是非常强大.事实上现却比較简单.优雅. 本文主要讲述MyBatis的架构设计思路,而且讨论MyBatis的几个核心部件.然后结合一个select查询实例.深入 ...
- Mybatis:缓存,动态SQL,注解SQL以及动态标签使用
1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 &a ...
- Mybatis 缓存分析
其实本来不想专门的写一篇关于mybatis缓存的博客的.在之前的博客中已经大致的把mybatis的整体流程讲了一遍.只要按照步骤一步步的点进去,关于缓存的代码很容易就能发现.但是今天在看代码的时候突然 ...
- mybatis缓存机制
目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...
随机推荐
- Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- 常用业务返回对象类ResponseJson
目录 1.ResponseJson类 2.使用举例 1.ResponseJson类 import java.io.Serializable; public class ResponseJson imp ...
- JVM内存分为哪几部分?各个部分的作用是什么?
JVM内存分为哪几部分?各个部分的作用是什么? 1. Java虚拟机内存的五大区域 Java的运行离不开Java虚拟机的支持,今天我就跟大家探讨一下Java虚拟机的一些基础知识. JVM内存区域分 ...
- java中的数据转换与前置,后置加加
public class Demo{ public static void main(String [] args){ int num=2; System.out.println(num++);//后 ...
- js -- 侧边悬浮栏特效
github: https://github.com/mybee/float-scroll-page #menu{width: 120px;height: auto; position: fixed; ...
- 【paddle学习】识别数字
Softmax回归(Softmax Regression) 最简单的Softmax回归模型是先将输入层经过一个全连接层得到的特征,然后直接通过softmax 函数进行多分类 输入层的数据$X$传到输出 ...
- django的form验证机制
今天遇到了一个奇怪的问题,django中formview一直返回200,但是却没有执行form_valid方法,然后在其中加了一个form_invalid方法: class StudentRegist ...
- postgresql 导出建表语句的方法-类似describe table
https://www.youtube.com/watch?v=PMfcsYzj-9M 这个视频不错, The Definitive Guide to Object-Oriented JavaScr ...
- linux 状态与系统调优
什么样的cup 才算是负载高呢?才算忙呢?
- chrome插件网站
chrome插件网站 http://chromecj.com/