大佬教程收集整理的这篇文章主要介绍了mybatis缓存的设计,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
继续用提问的方式来看Mybatis的缓存设计。
1、Mybatis如何开启缓存
@H_684_0@mybatis对查询结果进行缓存,所以缓存的对象为具体的Statement通过在Statement上是否使用缓存来启用。
<SELEct id="SELEctByprimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap" fetchSize="5" statementType="PREPARED" useCache="true" >useCache默认值为true
2、谁持有缓存?
Mybatis中有两个对象持有缓存。
CachingExecutor以及BaseExecutor
https://cn.js-code.com/res/2019/02-07/10/2f32a7ed7224d6d4e4344b07bf12fa66.png" alt="" width="248" height="163"> https://cn.js-code.com/res/2019/02-07/10/e9f2d1272767331e96f37a6d38736da4.png" alt="" width="297" height="162">
CachingExecutor和SimpleExecutor的关系是持有的关系
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/03a511ce1211126f0f90cb76fcbc19f2.png" width="291" height="222">
3、缓存何时开启?
当开启Mapper级别的缓存时,
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/d41501ba42dc54b1816d2e6764aa65fe.png" width="347" height="321">
update,insert,Delete),即使事物没有提交,缓存
失效
和MySQl的rr隔离级别一致,不会导致幻读(read uncommited)
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/4aaf96fdfd9ba1ff24c4448fc48f27b6.png" width="271" height="344">
两次查询,只访问了数据库1次.第二次不再请求数据库
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/2a256a3682d81310f224756a7985dc0e.png" width="456" height="203">
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/f7b2730be2561d911cf2ae71d581e368.png" width="533" height="262">
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/770df4c3c80d8d4c08b62b1d1443d1f5.png" width="666" height="338">
配置缓存参数
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/597bd649cb109992b334b48eb44f1edb.png" width="405" height="225">
结果出乎意料,缓存竟然没有命中。分析下原因:
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/f407106cff236d6b9f3201671c76d124.png" width="328" height="176">
即使打开了transactionalCache里.
title="mybatis缓存的设计" alt="mybatis缓存的设计" src="https://cn.js-code.com/res/2019/02-07/10/a34f13464184d56ea01bc1c1b7f92a32.png" width="504" height="274">
在某一秒,有10个并发共同访问数据库。那他们会同时产生10个连接,并不会命中。
6、Mybatis设计的目的
简单,不配置也可以使用。用与在一个sqlSession中多次使用相同条件多次查询。
7、Mybatis设计的目的
增强版,也支持事物级别的缓存,同时支持不同sqlSession之间的共享。扩大可缓存的可用性。
以上是大佬教程为你收集整理的mybatis缓存的设计全部内容,希望文章能够帮你解决mybatis缓存的设计所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。