mybatis架构原理
Posted Whoooops
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis架构原理相关的知识,希望对你有一定的参考价值。
mybatis架构设计
1.接口层:我们接触最多的就是这层,通过调用接口层提供的api,像selectList()等方法就是此层提供的api。
基于statementID使用的是传统mybatis提供的apl接口,selectList等方法。
基于Mapper接口使用的是Mapper代理的方式调用接口。
2.数据处理层:负责处理sql相关的操作,封装的jdbc就在此层。
3.框架支撑层:负责最基础的功能支撑,包括连接管理,事务管理,配置加载和缓存等等一些公用的东西。
mybatis主要构件及相互关系
SqlSession | 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数 据库增删改查功能 |
Executor | MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓 存 的维护 |
StatementHandler | 封装了JDBC Statement操作,负责对JDBC statement的操作,如设置参 数、将Statement结果集转换成List集合。 |
ParameterHandler | 负责对用户传递的参数转换成JDBC Statement所需要的参数, |
ResultSetHandler | 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合; |
TypeHandler | 负责java数据类型和jdbc数据类型之间的映射和转换 |
MappedStatement | MappedStatement维护了一条<select | update | delete | insert>节点 的封 装 |
SqlSource | 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封 装到BoundSql对象中,并返回 |
BoundSql | 表示动态生成的SQL语句以及相应的参数信息 |
总体流程
(1) 加载配置并初始化
触发条件:加载配置文件
配置来源于两个地方,一个 是配置文件(主配置文件conf.xml,mapper文件*.xml),—个是java代码中的 注 解,将主配置文件内容解析封装到Configuration,将sql的配置信息加载 成为一个mappedstatement 对 象,存储在内存之中
(2) 接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。
(3) 处理操作请求
触发条件:API接口层传递请求过来
传入参数:为SQL的ID和传入参数对象 处理过程:
(A) 根据SQL的ID查找对应的MappedStatement对象。
(B) 根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C) 获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D) 根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理 结果。
(E) 释放连接资源。
(4) 返回处理结果
将最终的处理结果返回。
以上是关于mybatis架构原理的主要内容,如果未能解决你的问题,请参考以下文章