关注“Java 后端技术全栈”
回复“面试”获取全套面试材料
在以前文章中,咱们对 Mybatis 进行了入门级的介绍教小师妹疾速入门 Mybatis,看这篇就够了,明天咱们来从一个全局的角度看看 Mybatis。
本文次要内容:
Mybatis 工作流程
Mybatis 工作流程能够大抵分为四个步骤:
上面咱们就来说说这四个步骤:
加载配置并初始化
触发条件:加载配置文件,比方:全局配置文件、XxxMapper.xml 配置文件等。
配置来源于两个中央,一处是配置文件,一处是 Java 代码的注解,将 SQL 的配置信息加载成为一个个 MappedStatement 对象(包含了传入参数映射配置、执行的 SQL 语句、后果映射配置),存储在内存中。
接管调用申请
触发条件:调用 Mybatis 提供的 API
传入参数:为 SQL 的 ID 和传入参数对象
处理过程:将申请传递给上层的申请解决层进
行解决。
解决操作申请 触发条件:API 接口层传递申请过去
传入参数:为 SQL 的 ID 和传入参数对象
具体处理过程:(A)依据 SQL 的 ID 查找对应的 MappedStatement 对象。
(B)依据传入参数对象解析 MappedStatement 对象,失去最终要执行的 SQL 和执行传入参数。
(C)获取数据库连贯,依据失去的最终 SQL 语句和执行传入参数到数据库执行,并失去执行后果。
(D)依据 MappedStatement 对象中的后果映射配置对失去的执行后果进行转换解决,并失去最终的处理结果。
(E)开释连贯资源。
返回处理结果
将最终的处理结果返回。
Mybatis 大抵流程:
Mybatis 实现原理
Mybatis 底层还是采纳原生 jdbc 来对数据库进行操作的,只是通过 SqlSessionFactory,SqlSession Executor,StatementHandler,ParameterHandler,ResultHandler 和 TypeHandler 等几个处理器封装了这些过程。
执行器:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 参数处理器:ParameterHandler (getParameterObject, setParameters) 构造处理器 ResultSetHandler (handleResultSets, handleOutputParameters) sql 查问处理器:StatementHandler (prepare, parameterize, batch, update, query)
其中 StatementHandler 用通过 ParameterHandler 与 ResultHandler 别离进行参数预编译 与后果解决。而 ParameterHandler 与 ResultHandler 都应用 TypeHandler 进行映射。如下图:
MyBatis 整体架构
Mybatis
的性能架构分为三层:
每一层对应具体内容:
API 接口层
首先接口层是咱们打交道最多的层,外围对象就是 SqlSession,它是下层利用和 Mybatis 打交道的桥梁,也有的人称之为大门,SqlSession 中定义了十分多的对数据库操作的办法,接口层在承受到调用申请时,会调用外围解决层的相应模块来实现具体的数据库操作。。
数据处理层
这一层次要就是跟数据库操作相干的动作都是在这数据处理层实现的。
外围解决层次要做了这 4 件事:
- 把接口中传入的参数解析并映射成 JDBC 类型;
- 解析 xml 文件中的 SQL 语句,包含插入参数和动静 SQL 的生成;
- 执行 SQL 语句;
- 处理结果集,并映射成 Java 对象。
插件也属于核心层,这是由它的工作形式和拦挡的对象决定的。
根底撑持层
负责最根底的性能撑持,包含连贯治理、事务管理、配置加载和缓存解决,这些都是共用的货色,将他们抽取进去作为最根底的组件。为下层的数据处理层提供最根底的撑持。
MyBatis 的次要成员
Configuration
MyBatis 所有的配置信息都保留在 Configuration 对象之中,配置文件中的大部分配置都会存储到该类中。
SqlSession
作为 MyBatis 工作的次要顶层 API,示意和数据库交互时的会话,实现必要数据库增删改查性能。
Executor
MyBatis 执行器,是 MyBatis 调度的外围,负责 SQL 语句的生成和查问缓存的保护。
StatementHandler
封装了 JDBC Statement 操作,负责对 JDBC statement 的操作,如设置参数等。
ParameterHandler
负责对用户传递的参数转换成 JDBC Statement 所对应的数据类型。
ResultSetHandler
负责将 JDBC 返回的 ResultSet 后果集对象转换成 List 类型的汇合。
TypeHandler
负责 java 数据类型和 jdbc 数据类型 (也能够说是数据表列类型) 之间的映射和转换。
MappedStatement
MappedStatement 保护一条 <select|update|delete|insert>
节点的封装。
SqlSource
负责依据用户传递的 parameterObject,动静地生成 SQL 语句,将信息封装到 BoundSql 对象中,并返回
BoundSql
示意动静生成的 SQL 语句以及相应的参数信息。
Mybatis 层次结构
举荐浏览
《算法问题整顿》.pdf
《写给大忙人看的 JAVA 核心技术》.pdf
并发编程大扫盲:带你理解何为线程上下文切换