架构初识
这是在网络上找到的结构图,看图,可以了解到Mybatis的功能架构可以分为三层:
- API接口层:对外提供了可以使用的接口API,开发人员通过这些API可以操作数据库,接口层接收到请求之后,就会到数据处理层完成具体的请求操作,mybatis和数据库的交互主要是有两种方式:第一种是通过Mybatis提供的API,还有一种是Mapper代理的方式,也是平常最常见的方式
- 数据处理层:负责具体的SQL操作:定位,查找,参数拼接、执行等等,主要的作用是根据调用的请求完成一次数据库的数据交互
- 基础服务层:Mybatis提供了连接、事务管理、配置加载等基础服务,都是Mybatis自带的功能,是为了更好服务数据处理层的逻辑
生命周期
这个图也是在网络上找到的个人感觉比较好的一张图
组件分析
组件 | 描述 |
SqlSession | 是Mybatis最主要的API,标识和数据库交互的会话,完成必要的数据库CURD功能 |
Executor | Mybatis执行器,是Mybatis调度的和信,负责SQL语句的生成和查询缓存的维护 |
StatementHandler
| 封装JDBC Statement操作,负责对JDBC Statement的操作,比如设置入参、回参、封装结果转换成List集合 |
ParameterHandler
| 负责对用户传递的参数转换成JDBC Statement所需要的参数 |
ResultSetHandler
| 负责将JDBC返回的ResultSet结果集对象转换为List类型的集合 |
TypeHandler
| 负责java数据类型和JDBC数据类型之间的映射和转换 |
MappedStatement
| 维护了一条<select><update><delete><insert>的封装 |
SqlSource
| 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中并返回 |
BoundSql
| 表示动态生成的SQL语句以及相应的参数信息 |
流程分析
1、加载配置并初始化配置信息
这里的配置文件主要是来自主配置文件,也就是mybatis-config.xml核心配置xml文件,还有一个就是java代码种的注解,程序将主配置文件内容解析并封装到Configuration对象,将SQL的配置信息加载成一个MappedStatement对象并存储在内存中
2、接收调用请求
在调用Mybatis提供的API的时候,接收SQL的ID和入参,将请求传递给下游的请求处理层来处理请求
3、处理操作请求
当API接口把请求和参数等信息传递过来之后,解析ID和入参,然后进行一系列的解析、拼接、执行SQL等操作,具体流程如下
- 根据传递过来的ID查找对应的MappedStatement对象(包含sql语句、参数等等)
- 根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL(完整的有参数的可以直接在MySQL客户端执行的SQL)
- 获取数据库连接,根据上述得到的最终SQL,到数据库客户端执行并得到结果
- 根据MappedStatement对象的结果映射配置(也就是ResultMap)对返回的结果进行转换处理,返回最终定义的实体类对象结果
- 释放连接资源
4、返回最终的请求结果