关注“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
并发编程大扫盲:带你理解何为线程上下文切换
发表回复