mybatis的执行流程

2021-06-08 22:21发布

mybatis的执行流程如下代码:

  1. 通过Resources加载配置文件mybatis-config.xml

  2. 创建一个SqlSessionFactory

    我们发现里面有一个XMLConfigBuilder,是一个XML解析器

在这个类中的parse()方法解析mybatis配置文件

解析configuration节点下的子节点

然后我们发现parse()解析完成后,他返回了一个configuration对象,它是用来存放mybatis核心配置文件解析完成后的结果。解析完后又返回了一个build方法,把刚才的返回值configuration作为参数传入这个方法中,并返回了一个DefaultSqlSessionFactory对象,这是SqlSessionFactory的实现类,用来生产defaultSqlSession对象。

 这时候会不会有的小伙伴疑惑,为什么既然DefaultSqlSessionFactory是SqlSessionFactory的实现类,为什么我们不直接new一个defaultSqlSessionFactory呢?原因:看源码知道,如果new defaultSqlSessionFactory的话,我们需要一个configuration对象,而这个对象有事经过层层磨难才得到的,所有我们一般采取构建筑模式,直接把xml字节流或字符流给了sqlSessionfactoryBuilder就好了,我们就不用管他是怎么生成的了。

3.创建SqlSession

4.获取接口并执行sql(通过DefaultSqlSession的getMapper()来生成)

mybatis使用了【代理模式】为我们的接口生成了一个【实现类】

真正工作的是executor执行器

总结一下:mybatis运行时要先通过resources把核心配置文件也就是mybatis.xml文件加载进来,然后通过xmlConfigBulider来解析,解析完成后把结果放入configuration中,并把它作为参数传入到build()方法中,并返回一个defaultSQLSessionFactory。我们再调用openSession()方法,来获取SqlSession,在构建SqlSession的同时还需要transaction和executor用于后续执行操作。