Mybatis工作流程及原理详解

一、概述
1.何为mybatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、MyBatis的重要组件
Mybatis底层封装了JDBC,使用了动态代理模式。
1.SqlSessionFactoryBuilder (构造器):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。

2.SqlSessionFactory (工厂接口):使用工厂模式生成SqlSession。

3.SqlSession (会话): 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。

4.SQL Mapper (映射器): 它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。

5.Executor:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement)。以上三个就是主要的Executor。通过下图可以看到Mybatis在Executor的设计上面使用了装饰器模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存

三、Mybatis工作流程

1.通过SqlSessionFactoryBuilder创建SqlSessionFactory对象。

2.通过SqlSessionFactory创建SqlSession对象。

3.通过SqlSession拿到Mapper代理对象。

4.通过MapperProxy调用Mapper中增删改查的方法。

四、Mybatis源码分析
1.通过SqlSessionFactoryBuilder创建SqlSessionFactory。
首先在SqlSessionFactoryBuilder的build()方法中可以看到MyBatis内部定义了一个类XMLConfigBuilder用来解析配置文件mybatis-config.xml。针对配置文件中的每一个节点进行解析并将数据存放到Configuration这个对象中,紧接着使用带有Configuration的构造方法发返回一个DefautSqlSessionFactory。

Mybatis工作流程及原理详解_第1张图片
Mybatis工作流程及原理详解_第2张图片
第二步则是通过SqlSessionFactory创建SqlSession。

在这里插入图片描述
Mybatis工作流程及原理详解_第3张图片
Mybatis工作流程及原理详解_第4张图片
第三步通过SqlSession拿到Mapper对象的代理。
在这里插入图片描述
在这里插入图片描述
Mybatis工作流程及原理详解_第5张图片
在这里插入图片描述
在这里插入图片描述
第四步通过MapperProxy调用Maper中相应的方法。
Mybatis工作流程及原理详解_第6张图片
Mybatis工作流程及原理详解_第7张图片
Mybatis工作流程及原理详解_第8张图片
Mybatis工作流程及原理详解_第9张图片

总结:
本文结合Mybatis源码,详细的阐述了业务编码中通过Mapper接口方式来操作数据库的底层实现原理。
实现关键在于每次通过调用接口方法操作数据库的时候,Mybatis都会利用MapperProxyFactory创建当前Mapper接口对应的MapperProxy代理实现类,在此代理类定义的增强中,会利用sqlSession、接口、方法等信息构造MapperMethod。MapperMethod是Mybatis对Mapper的接口方法生成的对应封装类,此封装类定义了真正的操作数据库的代码实现,最终对数据库的操作就是依赖他实现的。

你可能感兴趣的:(mybatis)