走进Java程序员——MyBatis的创建执行流程(内附源码)

在这里插入图片描述
最近刚学完MyBatis,趁着大好机会,总结一下它的执行流程,面试也爱问这个

学习就像干饭,干完这顿接下顿——————鲁迅
在这里插入图片描述

第一步:

InputStream is

首先Mybaitis自己的一个Resources类会去调用一个叫getResourceAsStream()的方法

加载配置MyBatis的核心配置文件,得到一个流对象。(本质上还是走的java.lang包下的ClassLoader类加载器的getResourceAsStream)

源码:

在这里插入图片描述
本质上还是去使用java.lang包下的类加载器

在这里插入图片描述

第二步:

有了这个流对象,下面执行这个方法

在这里插入图片描述
会先去创建一个SqlSessionFactoryBuilder对象(构建者对象),调用build()方法,传入第一步我们得到的那个流对象。

在这个过程中,首先,MyBatis会先去创建一个XMLConfigBuilder解析器对象,

在这里插入图片描述
解析完成之后,返回一个configuration对象,这个对象里面封装了解析之后我们配置的信息

正好这个configuration对象,就是我们这个方法创建(I)SqlSessionFactory类型对象需要的参数

在这里插入图片描述
返回的就是一个实现了SqlSessionFactory接口的DefaultSqlSessionFactory对象

第三步:

有了这个SqlSesionFactory实现类的对象之后,
在这里插入图片描述

我们调用openSession()的方法,这个过程中

在这里插入图片描述
需 要 通 过TransactionFactory 生成 Transaction 对象, 并且, 还需要创建核心执行器 Executor 对象,基于这些条件,

最终创建了实现SqlSession接口的DefaultSqlSession对象

第四步:

之后, 通过 SqlSession 对象执行相应的操作, 如果执行成功, 调用 commit 方法提交事务; 如果失败, 调用rollback 方法事务回滚. 最后, 调用 close 方法关闭session 资源.

以上, 就是 大概的MyBatis 的运行原理

MyBatis运行过程中涉及到的类和接口:

  • Resources(C) 类

用于加载MyBatis核心配置文件

  • XMLConfigBuilder© 类

用于解析xml文件(核心配置文件)

  • Configuration©类

用于存放xml文件解析后的结果

  • DefaultSqlSessionFactory(C)类

是SqlSessionFactory(I)的实现类,创建时需要使用Configruation对象作为参数

  • SqlSession(I)接口

是MyBatis操作的核心

  • DefaultSqlSession(C)类

是SqlSession接口的实现类

  • TransactionFactory(I)接口

用于生产Trasaction对象(关于事务的)

  • Transaction(I) 接口

用于表示操作数据库的事务对象

  • Executor(I)接口

是MyBatis的核心执行器,类似于JDBC中的Statement,常用的实现类是SimpleExecutor

文章结尾

好了,MyBatis的运行原理就写到这里,以后更深入的了解后会再来补充。

博主在这里给大家发个福利~
这里整理了20多家公司的真实面试经历,以及各种关于Spring、Spring boot、Spring MVC、MyBatis、MySQL、JVM等知识点,如果有需要的小伙伴可以加群1149778920 来自行领取 暗号:优快云
以下是部分资料截图(所有资料均已整合成文档,pdf压缩打包处理)。

在这里插入图片描述
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值