一、Mybatis 整体执行流程
二、MyBatis的整体架构体系
三、详情
概述:对应 session 模块。
接口层相对简单,其核心是 SqlSession 接口,该接口中定义了 MyBatis 暴露给应用程序调用的 API,也就是上层应用与 MyBatis 交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。
作用:
使用SqlSession接口和Mapper接口通知调用哪个sql还有关联参数。
可以实现数据的增/删/改/查接口 配置信息维护接口,进行动态的更改配置
1.获取SqlSession流程分析
2.配置解析
概述: 对应 builder 和 mapping 模块。前者为配置解析过程,后者主要为 SQL 操作解析后的映射。
在 MyBatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息,解析后的配置信息会形成相应的对象并保存到 Configuration 对象中。
利用该 Configuration 对象创建 SqlSessionFactory对象。待 MyBatis 初始化之后,开发人员可以通过初始化得到 SqlSessionFactory 创建 SqlSession 对象并完成数据库操作。
Configuration概述:是一个所有配置信息的容器对象实战分析:Configuration对象涉及到的配置信息分析
3.SQL解析(SqlSource)
概述: 对应 scripting 模块。
MyBatis 中的 scripting 模块,会根据用户传入的实参,解析映射文件中定义的动态 SQL 节点,并形成数据库可执行的 SQL 语句。之后会处理 SQL 语句中的占位符,绑定用户传入的实参
负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回。
RawSqlSource 负责处理静态 SQL 语句,它们最终会把处理后的 SQL 封装 StaticSqlSource 进行返回。
StaticSqlSource 处理包含的 SQL 可能含有 “?” 占位符,可以被数据库直接执行。
DynamicSqlSource 负责处理动态 SQL 语句。
ProviderSqlSource 实现 SqlSource 接口,基于方法上的@ProviderXXX
注解的 SqlSource 实现类。
4.SQL执行(Executor)
概述:对应 executor 模块
是MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护。
SQL 语句的执行涉及多个组件 ,其中比较重要的是 Executor、StatementHandler、ParameterHandler 和 ResultSetHandler
- Executor 主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给 StatementHandler完成。
- StatementHandler 首先通过 ParameterHandler 完成 SQL 语句的实参绑定,然后通过 java.sql.Statement 对象执行 SQL 语句并得到结果集,最后通过 ResultSetHandler 完成结果集的映射,得到结果对象并返回。
4. XML 解析流程