1 Star 0 Fork 0

djg / 面试整理

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mybatis.md 2.25 KB
一键复制 编辑 原始数据 按行查看 历史
dulaoshialways 提交于 2020-12-22 11:05 . 初始化

Mybatis

缓存机制

https://mp.weixin.qq.com/s?__biz=MzAwNjkxNzgxNg==&mid=2247487208&idx=2&sn=df700fb944400211cb0417f854c612ed&chksm=9b07553fac70dc290911f142f1dffb81b610c131892a4d1486ed68a28b2af5e64d0b5dbb0635&mpshare=1&scene=1&srcid=0708bLn2FMNl8ggYUBIlbjdf&sharer_sharetime=1594214920074&sharer_shareid=d7d77a73b6d7ae095bea0662f64e6a76&key=47ab050d12c6211b99fbe99d17c976fd22c02f23c728aba16db8cfb774ffaa96c704d63ae45cedf1f525d4ca5be96e0a59e7a6337e66829c78902af513b13aab8c346e49ac6bb3b5c445d4fb9ccfb547&ascene=1&uin=MTQ1OTA1NzIyMA%3D%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=A7xjqKvdvzWjFlR8Nod%2Bf8E%3D&pass_ticket=ezF2ZnN6wCFZ45TmE3n5TFQ4eKbOxXFoI9Gu14WNxE4LowLsY0GXrMdcYhocsT%2Bn

一级缓存

mybatis的一级缓存是sqlSession级别的,支持同一个sqlSession下的缓存。

一级缓存分为两个部分

  • sqlSession:数据库的一个连接
  • statement:一个sql语句

**注意:**如果想要支持一级缓存,必须保证这些sql语句全部执行完,再去commit(),也就是说需要放到一个事务中去执行。

二级缓存

一级缓存中,是一个sqlSession使用一个缓存,而mybatis的二级缓存,则支持多个SqlSession之间共享缓存。mybatis默认开启二级缓存

虽然在mybatis的Configuration中已经默认开启了二级缓存,但是需要我们在mapper.xml文件中,添加cache或者cache-ref标签,进行缓存配置。

cache标签用于声明namespace使用二级缓存,并且可以通过以下属性自定义配置

  • type:cache使用的类型,默认是PerpetualCache
  • eviction:定义回收的策略,常见的有FIFO,LRU
  • flushInterval:配置一定时间自动刷新缓存
  • size:最多缓存对象的个数
  • readOnly:是否只读,若配置可读写,则需要对应的实体类能够序列化
  • blocking:配置若缓存中找不到对应的key,是否会一直blocking,直到有对应的数据进入缓存

cache-ref代表引用别的命名空间的Cache配置,两个命名空间的操作使用的是同一个Cache

要想实现两个命名空间共享缓存,那么可以cache-ref标签的namespace属性引入另一个命名空间,如:

<cache-ref namespace="mapper.OrderMapper"/>
1
https://gitee.com/DuLaoShi/interview-arrangement.git
git@gitee.com:DuLaoShi/interview-arrangement.git
DuLaoShi
interview-arrangement
面试整理
master

搜索帮助