Mybatis源码解析(一) -- 基本执行流程

概述

mybaits是一个半自动的ORM框架,可以通过编写XML的形式与Mapper接口对应,用于操作数据库。它的基本执行流程,可分为两个部分,分别是环境构建与Mapper方法执行

环境构建

该步骤的的主要工作是连接数据库,构建数据源,创建Mapper接口实例

环境中的重要组件类

下面的类顺序就是在Mybatis源码中的出现顺序

SqlSessionFactoryBuilder

该类是Mybatis启动构建的入口类,其构造方法是将xml配置文件读取为Reader流,最终的产物是SqlSessionFactory

XMLConfigBuilder

该类是Mybatis中解析配置的实现类,用于解析并生成数据源,Mapper实现映射工厂,事务管理器,别名注册器

Configuration

该类是是整个Mybatis中的核心类,持有数据库环境对象实例,Mapper接口注册映射器,别名注册器等配置类

Environment

该类的作用主要是提供数据库连接与事务支持,所以它持有数据库的数据源和用于创建事务连接的事务工厂

DataSource

该类是Mysql驱动的标准接口,其最主要的功能是产生Connection实例,对于Java来说,就是基于Connection接口与数据库通信的

MapperProxy

在使用Mybatis时,我们都是直接使用接口,根本没有对Mapper接口进行实现,在Mybatis中是使用JDK的动态代理技术生成的实现类,而MapperProxy就是动态代理的实现类

MapperProxyFactory

在这里,出现了第一个以Factory结尾的类,我们很容易就想到基于工厂模式生成Mapper接口实现类,它的作用就是产生与其对应的Mapper接口实现类,其实内部是调用了JDK动态代理的接口,创建的实现类

MapperRegistry

中文名叫别名注册机,其作用是维护Mapper接口与MapperProxyFactory的对应关系,用于根据Mapper接口,找到对应的实现类工厂实例,以便于创建实现类

MapperMethod

中文名叫映射方法,在Mybatis中,其实它就是Mapper接口调用方法时的实际调用对象,我们可以把它理解为Mapper接口方法的抽象

SqlSessionFactory

该类最重要的方法是提供一个获取Sql会话的实例,我们可以通过该实例,获取Mapper接口,用于执行SQL语句

SqlSession

该类最重要的功能是提供给外部获取Mapper接口实现类的入口,并且该接口还会给内部提供基础的SQL查询接口

小结

根据以上的类的产生顺序,我们可以把Mybatis的构建顺序简单的描述为:
SqlSessionFactoryBuilder获取到配置文件流对象Reader后,创建XMLConfigBuilder实例A,实例A读取并解析xml内容,读取mysql配置信息,获取到Environment实例B。
解析Mapper文件,生成MapperProxyFactory实例并加入到映射注册机中,然后根据XML的SQL语句(mapper接口方法)读取参数类型,返回值类型,生成MapperMethod实例并缓存

Mapper方法执行

该步骤的主要工作执行SQL语句,拼接参数,基于反射的封装结果集

知识点引入

在进入这一章之前,我们先来回忆一下,如何使用传统的JDBC的方式与数据库通信和操作的.

代码实践

在这里插入图片描述

通过上面的代码,我们基本了解了是如何通过JDBC来操作数据库的,而对于Mybatis的底层也是这样,获取Connnection接口,获取Statement,执行SQL,最后处理返回结果

Mybatis的执行流程

在Mybatis的构建完成后,最终会得到一个SqlSessionFactory的实例,我们通过该实例获取到SqlSession,并最终得到Mapper接口的代理对象实例,最后调用Mapper接口即可操作Mysql
接下来我们通过时序图的方式呈现Mapper接口的调用过程,在执行过程之前让我们来了解下该过程需要经过的类(书写顺序即执行的调用顺序)

MapperProxy

该类其实就是Mapper接口的实现类,该类其实就是实现了InvocationHandler接口的invoke方法,调用Mapper接口方法都会从该方法进入

MapperMethod

Mapper接口方法的封装,通过invoke(Method method,…)方法,的method实例获取对应的MapperMethod实例,最后通过执行execute()方法执行sql操作

SqlSession

SQL的实际调用者,其实就是它直接调用JDBC,执行操作

Environment

数据库配置信息

DataSource

JDBC的标准接口,用于获取Connection接口

Connection

该接口是JDBC的标准接口,用于产生Statement并执行SQL

获取Mapper接口实现类时序图

在这里插入图片描述

Mapper接口执行时序图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值