MyBatis缓存设计
2023-09-11 14:18:08 时间
和大多数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缓存机制的设计与实
相关文章
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
- MyBatis 缓存
- SpringBoot集成Mybatis
- 使用mybatis插入自增主键ID的数据后返回自增的ID
- mybatis参数为0识别为空字符串的查询处理
- MyBatis 一级缓存、二级缓存全详解(一)
- Mybatis的一级缓存和二级缓存详解
- 【Java】Mybatis-Plus获取不到数据库表中的部分字段(带下划线_的字段)
- MyBatis - (一) 基本数据操作命令和简单映射
- spingMVC+mybatis+spring-session共享内存配置
- mybatis一级缓存二级缓存
- Mybatis_mybatis常用jdbcType数据类型
- Mybatis之执行insert、update和delete操作时自动提交
- mybatis.net
- mybatis 查询中collection和association 标签的使用
- 从mybatis源码看JDK动态代理
- Java idea 创建SqlMapConfig.xml,需要新增一个mybatis-cfg.xml模板