Mybatis源码解析

1.mybatis作为SSM中的持久层,我们都知道他是对JDBC的封装,那么他底层是如何实现的呢(新人记录学习,可能分析的不是很到位 各位别喷,下面分析并不是接口绑定的情况)
在这里插入图片描述
先从解析配置文件说起
在这里插入图片描述
先从这个方法作为如果,调用重载方法;类加载器为空,在这里插入图片描述
又调用了classLoaderWrapper.getResourceAsStream
在这里插入图片描述
getClassLoaders里面又创建了新的类加载器:
在这里插入图片描述
在这里插入图片描述
这个方法最终会返回一个InputStream,
下面先介绍一下SqlSessionFactoryBuilder
这个首先会调用 XMLConfigBuilder 类的构造器来创建一个 XML 配置构建器对象,
利用这个构建器对象来调用其解析方法 parse()来完成 Configuration 对象的创建,之后以这
个配置对象为参数调用会话工厂构建者类中的 build(Configuration config)方法来完成
SqlSessionFactory(会话工厂)对象的构建。

Configuration为mybatis上下文对象,每个框架都会又这样的上下文对象,化这个类的目的就是为了使用其对象作为项目全局配置对象,这样通过配置文件配置的信息可以保存在这个配置对象中,而这个配置对象在创建好之后是保存在 JVM 的 Heap 内存中的,方便随时读取。

方法重载调用3个参数的build方法,初始化XMLConfigBuilder对象
在这里插入图片描述
在构造方法里调用了3个参数的构造方法,在下面的构造方法中又通过super关键字调用父类的构造方法创建了Configuration上下文对象
在这里插入图片描述
在这里插入图片描述
下面开始解析
在这里插入图片描述
在这里插入图片描述
parser.evalNode("/configuration")可以看成是找到根节点,作为参数传递给parseConfiguration()方法
在parseConfiguration方法里又定义了很多方法,都是解析对应的节点的,解析完成之后将值set到Configuration对象里,解析完成之后会将Configuration对象返回,执行build方法在这里插入图片描述
build方法会返回一个DefaultSqlSessionFactory对象,SqlSessionFactory其实是一个接口,DefaultSqlSessionFactory才是具体的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从工厂里得到sqlsession对象 ,这里又涉及到了Executor ,Executor是一个接口里面定义了他能执行哪些操作的抽象定义
在这里插入图片描述
如update
在这里插入图片描述
在这里插入图片描述
在执行open方法的时候,会给定一个默认的类型,默认是Simple
在这里插入图片描述
继承结构图
在这里插入图片描述
SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象。(可以是 Statement 或 PrepareStatement 对象)

ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map<String, Statement>内,供下一次使用。(可以是 Statement 或 PrepareStatement 对象)

BatchExecutor:执行 update(没有 select,JDBC 批处理不支持 select),将所有 sql 都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个 Statement对象,每个 Statement 对象都是 addBatch()完毕后,等待逐一执行
默认是simple,这里会做一个条件判断 会帮我创建一个simpleExecutor,然后将值在这里插入图片描述封装到DefaultSqlSession DefaultSqlSession实现了在这里插入图片描述接口
在这里插入图片描述
但是到这里并没有执行SQL语句,在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
到这里返回一个StatementHandler 这是一个接口 下面有两个实现类
在这里插入图片描述

其实会new一个RoutingStatementHandler

在这里插入图片描述

进来之后可以发现里面有一个switch语句 根据Executor的类型返回对应的
StatementHandler,
在这里插入图片描述

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

得到Statement对象
在这里插入图片描述
在这里插入图片描述
得到SQL语句并执行,由此可见:MyBatis 其实就是将操作数据库的 JDBC 操作封装起来的一个框架,同时还实现了 ORM
在这里插入图片描述
在这里插入图片描述
结果集处理器,如果是查询操作,必定会有返回结果,针对返回结果的操作,就要使用ResultSetHandler 来进行处理,这个是由 StatementHandler 来进行调用的。这个处理器的作用就是对返回结果进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值