【手写MyBatis】(02)- 了解MyBatis架构原理
文章目录
MyBatis架构原理
架构图
接口层
接口层是MyBatis提供给开发人员的一套API.主要使用SqlSession接口.通过SqlSession接口和Mapper接口.开发人员可以通知MyBatis框架调用那一条SQL命令以及SQL命令关联参数.
SqlSession接口使用方式
Mapper接口使用方式
数据处理层
数据处理层是MyBatis框架内部的核心实现.来完成对映射文件的解析与数据处理:
- 参数解析与参数绑定
- SQL解析
- 结果集映射解析与结果集映射处理
支撑层
支撑层用来完成MyBaits与数据库基本连接方式以及SQL命令与配置文件对应.主要负责:
- MyBatis与数据库连接方式管理
- MyBatis对事务管理方式
- 配置文件加载
- MyBatis查询缓存管理
架构流程图
说明:
mybatis配置文件
- SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
- Mapper.xml,此文件作为mybatis的sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
- 全局配置文件和映射文件中的信息最终会被封装到Configuration对象中
SqlSessionFactory
通过mybatis环境等配置信息构造SqlSessionFactory,即会话工厂,用于产生sqlSession对象。
sqlSession
通过会话工厂创建sqlSession即会话,程序员通过sqlsession会话接口对数据库进行增删改查操作。一个CURD对应一个sqlSession.
Executor执行器
mybatis底层自定义了Executor执行器接口来具体操作数据库,Executor接口有两个实现,一个是基本执行器(默认)、一个是缓存执行器,sqlsession底层是通过executor接口操作数据库的。
Mapped Statement
它也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息
等。mapper.xml文件中一个select\insert\update\delete标签对应一个
Mapped Statement对象,select\insert\update\delete标签的id即是Mapped
statement的id。
Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、
pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql
中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、
pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象
中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
从Configuraion对象的角度看流程
Executor执行器在执行CURD的时候需要创建sqlSession对象,使用Configuration获取sql语句及参数,因此Configuration对象由SqlSession对象传递过来。
而sqlSessio对象是通过sqlSessionFactory创建的,所以sqlSession的Configuration对象来源是sqlSessionFactory。
Configuration对象是对全局配置文件和映射文件信息的封装,所以在sqlSessionFactory的创建过程中,调用XMLConfigParser加载配置文件,生成Configuration对象
随后才能进入sqlSession的执行流程
调用流程图
各对象解析
SqlSession
接收开发人员提供Statement Id 和参数.并返回操作结果
Executor
MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler
封装了JDBC Statement操作,负责对JDBC statement的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler
负责对用户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler
负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler
负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement
维护了一条<select|update|delete|insert>节点的封装
SqlSource
负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回BoundSql表示动态生成的SQL语句以及相应的参数信息
Configuration
MyBatis所有的配置信息都维持在Configuration对象之中。
四大组件
Executor、StatementHandler、ParameterHandler、ResultSetHandler统称为MyBatis四大组件。
针对四大组件可以使用(实现接口)自定义插件去处理相关的代码,比如分页插件PageHelper。