Mybatis   发布时间:2019-10-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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的关系是持有的关系
CachingExecutor {

<span style="color: #0000ff">private <span style="color: #0000ff">final<span style="color: #000000"> Executor delegate;
<span style="color: #0000ff">private <span style="color: #0000ff">final transactionalCacheManager tcm = <span style="color: #0000ff">new transactionalCacheManager();

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">  

   配置缓存参数

Ting name="cacheEnabled" value="true"/>

   

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,请注明来意。
标签: