MyBatis-07 运行原理

MyBatis框架的使用主要包含如下步骤:

  • 获取SqlSessionFactory对象;
  • 获取SqlSession对象;
  • 获取接口的代理对象(MapperProxy);
  • 执行增删改查方法。

1. 根据配置文件创建SqlSessionFactory对象

具体创建流程如下图所示:
这里写图片描述
其中,第8步和第9步的DefaultSqlSession应改为DefaultSqlSessionFactory。

Configuration对象封装了所有配置文件的详细信息,包括全局配置文件和SQL映射文件,且解析器会将SQL映射文件中每一个增删改查标签封装为一个MappedStatement对象,并存放在Configuration对象中。

总结:解析全局配置文件和SQL映射文件的所有信息,保存在Configuration对象中,并返回包含Configuration对象的DefaultSqlSessionFactory实例。


2. 创建SqlSession对象

具体创建流程如下图所示:
这里写图片描述

总结:创建包含Executor和Configuration对象的DefaultSqlSession对象,注意Executor对象创建时会经过拦截器对其进行重新封装。


3. 获取接口的代理对象(MapperProxy)

具体创建流程如下图所示:
这里写图片描述

总结:代理对象MapperProxy中包含有DefaultSqlSession实例,即同时包含有Executor和Configuration对象。


4. 查询操作工作流程

以查询为例,其具体工作流程如下图所示:
这里写图片描述

查询流程图如下:

总结:

  • StatementHandler对象,用于处理SQL语句预编译、设置参数等相关工作;
  • ParameterHandler对象,用于设置SQL语句的预编译参数;
  • ResultSetHandler对象,用于处理结果集;
  • TypeHandler对象,则在整个过程中,进行数据库类型和JavaBean类型之间的映射。

5. 运行原理总结

/**
 * 总结:
 *  1、根据配置文件(全局配置和SQL映射文件)初始化Configuration对象
 *  2、创建包含Configuration和Executor对象的DefaultSqlSession实例
 *      Executor:根据全局配置文件中的defaultExecutorType创建出对应的Executor对象
 *  3、DefaultSqlSession.getMapper() : 获取Mapper接口对应的MapperProxy
 *  4、MapperProxy里面包含DefaultSqlSession对象
 *  5、执行增删改查方法:
 *      1)、调用DefaultSqlSession的增删改查(Executor)
 *      2)、会创建一个StatementHandler对象。
 *          (同时也会创建出ParameterHandler和ResultSetHandler)
 *      3)、调用StatementHandler预编译参数以及设置参数值
 *          使用ParameterHandler来给SQL设置参数
 *      4)、调用StatementHandler的增删改查方法;
 *      5)、ResultSetHandler封装结果
 *  注意:
 *      四大对象创建时都需要interceptorChain.pluginAll(parameterHandler);
 * 
 * @throws IOException
 */

猜你喜欢

转载自blog.csdn.net/bingbeichen/article/details/81032238
今日推荐