架构设计
- 整体架构
![9dce4e67e098d7c4ee9c95e1f9251e14.png](https://i-blog.csdnimg.cn/blog_migrate/e9423b7cad922c7f93eaed5694852111.jpeg)
分层说明
- Api接口层
mybatis与数据库交互的两种方式:
1、传统方式使用Mybatis的api
2、使用mapper代理的方式
- 数据处理层
负责具体的sql查找、解析、执行以及结果参数映射等,主要目的是根据请求完成一次数据库交互
- 基础支撑层
负责基础功能支撑,包括事务管理、连接管理、配置加载以及缓存处理等,这些都是一些公共的功能,将这些基础功能抽取出来作为组件为上游提供服务
![f061f887b3e447bc7485668815bf332c.png](https://i-blog.csdnimg.cn/blog_migrate/22ef3e529d5f9e689158a15198abd2b2.jpeg)
组件名称 | 作用 |
---|---|
SqlSession | 主要对用户暴露于数据库交互的接口如CRUD |
Executor | mybatis的执行器,主要用户sql生成缓存维护 |
StatementHandler | 对JDBCStatement操作的封装,主要就是对jdbcStatement的操作如参数设置、将结果转换为list等 |
ParameterHandler | 负责将用户传递的参数转换为jdbcStatement需要的参数 |
ResultSetHandler | 负责将ResultSet转换为用户想要的结果 |
TypeHandler | 负责将java类型与jdbc类型转换 |
MappedStatement | 封装crudSql |
SqlSource | 将用户传递的参数动态生成sql,封装到BoundSql中 |
BoundSql | 封装了动态sql以及参数信息 |
执行流程
- 加载配置文件并初始化
触发条件:配置文件加载
1、将主配置文中的内容封装到Configuration中
2、将用户自定义的xml中配置的内容或组件标记的sql封装到MappedStatement中
- 接收用户请求
触发条件:用户调用mybatis的api
传入参数:statementId和参数信息
处理过程:将请求转发给下层处理
- 处理请求
触发条件:api层调用
传入参数:statementId和参数信息
处理过程:
1、根据id找到对应的MappedStatement
2、根据传入的参数解析MappedStatement对象,得到最终要执行的sql和参数
3、获取连接,执行sql得到结果
4、根据MappedStatement对结果进行映射处理,得到最终结果
5、释放连接资源
- 返回处理结果