mybatis 你应该知道的执行流程

因为要准备面试了,最近看了关于ssm的一些理论知识,本文就是关于mybatis的执行流程以及mybatis缓存的了解,主要是上一个面试问了我mybatis的缓存,然后我一脸懵逼,现在知道了,原来就这。。。。好了话不多说,进入正文。

首先问大家一个问题,你理解的mybatis是怎么执行的?
是不是就先创建SqlSessionFactoryBuilder–> builder一下–> 得到SqlSessionFactory–> 再open一下 --> 得到SqlSession --> crud --> commit --> close ok请接着往下看。


  1. 通过Resource对象获得mybatis的配置文件信息
  2. 实例化SqlSessionFactoryBuilder对象
  3. builder()
  4. 通过XMLConfigBuilder对象解析配置文件信息
  5. 将解析后的信息存入Configuration对象中
  6. 实例化SqlSessionFactory对象
  7. Transactional事物管理器
  8. 创建Executor执行器
  9. 创建SqlSession
  10. crud
  11. 判断执行是否成功+事物是否回滚 [回到第7步]
  12. commit事物
  13. close

接下来是mybatis缓存的理解,其实这个知识至少目前来说我用的很少,算了 直接没用过。再mybatis中有一级缓存和二级缓存。默认情况下一级缓存是开启的,它的作用范围是一个SqlSession对象。也就从open()得到SqlSession开始,直到close()释放它。在这一段时间里,从数据库中查询的数据会放在一级缓存中,如果这个时候你再使用该对象差一次刚刚缓存了的数据,这时候就会从一级缓存中取。但是需要注意在这个范围内创建了一个新的SqlSession对象,查询刚刚缓存的数据是不会从一级缓存中取,而是去数据库中找。可以这么理解,一级缓存就是跟着一个SqlSession对象的。上面那种情况已经是一个新的SqlSession对象了,所以取不到前一个SqlSession对象一级缓存中的数据。还需要注意的是,update操作是会刷新一级缓存的。执行了update,该SqlSession对象的一级缓存区域是会刷新的。

接下来是二级缓存。正是因为一级缓存的的作用域太小了,就有了二级缓存,它默认情况下没有开启,需要我们手动开启,直接在mybatis的配置文件中加一个cache的标签即可。标签中也可以设置一些属性,就比如最多缓存多少数据呀,隔多少时间刷新一次缓存区呀…
二级缓存的作用域是一个namespace ,也就是一个mapper文件。首先是SqlSession对象查询数据库,查询完后将数据保存在一级缓存,在close之前将数据保存在二级缓存中。查询数据的顺序是先从二级缓存中找,然后是一级缓存,再然后是数据库,然后保存至一级缓存,再推送至二级缓存。
就这样,因为是手机写的这篇博客,就没有什么样式了,直接是纯文本,见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值