在上一篇文章中,我介绍了Mybatis的入门级别,以便您可以快速开始使用它。今天我们就从整体的角度来了解一下Mybatis。
本文主要内容:
Mybatis工作流程
Mybatis 工作流程大致分为四个步骤。
我们来讨论一下这四个步骤。
加载配置并初始化
触发条件:加载全局配置文件、XxxMapper.xml配置文件等配置文件。
配置来自两个地方。一是配置文件,二是Java代码注释。每个MappedStatement对象中都会加载SQL配置信息(包括传入参数映射配置、执行的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、SqlSessionExecutor、StatementHandler、ParameterHandler、ResultHandler、TypeHandler等几个处理器来封装的。
执行器:执行器(update、query、flushStatements、commit、rollback、getTransaction、close、isClosed) 参数处理程序:ParameterHandler(getParameterObject、setParameters) 结构处理程序ResultSetHandler(handleResultSets、handleOutputParameters) SQL 查询处理程序:StatementHandler(prepare、parameterize)、batch 、更新、查询)
其中StatementHandler用于分别通过ParameterHandler和ResultHandler进行参数预编译和结果处理。 ParameterHandler 和ResultHandler 都使用TypeHandler 进行映射。如下所示:
MyBatis整体架构
Mybatis功能架构分为三层。
每一层都对应着详细的内容。
API接口层
首先,界面层是我们打交道最多的层。 SqlSession是上层应用程序和Mybatis之间的桥梁,定义了很多数据库操作的方法。接口层当收到调用请求时,调用核心处理层相应的模块,完成具体的数据库操作。
数据处理层
在该层中,与数据库操作相关的动作主要在该数据处理层完成。
核心处理层主要做四件事:
将接口中传递的参数解析并映射为JDBC 类型,解析SQL 语句(包括参数插入和动态SQL 生成),并将结果集映射为Java 对象。插件也属于核心层。这取决于插件的工作方式以及它拦截的内容。
基础支撑层
负责连接管理、事务管理、配置加载、缓存等最基本的功能支持。这些被提取为其最基本的组成部分。为上层数据处理提供最基本的支持。
MyBatis的主要成员
Configuration
MyBatis的所有配置信息都存储在Configuration对象中,配置文件中的大部分配置都存储在该类中。
SqlSession
作为MyBatis的主要顶层API,它在与数据库交互时代表一个会话,并执行必要的数据库添加、删除、修改和查询功能。
Executor
MyBatis Executor是MyBatis调度的核心,负责生成SQL语句和维护查询缓存。
StatementHandler
封装了JDBC语句操作,负责设置参数等JDBC语句操作。
ParameterHandler
负责将用户传递的参数转换成JDBC语句对应的数据类型。
ResultSetHandler
将从JDBC返回的ResultSet结果集对象转换为List类型的集合。
TypeHandler
负责Java数据类型和jdbc数据类型(也称为数据表列类型)之间的映射和转换。
MappedStatement
MappedStatement 管理select|update|delete|insert 节点的包。
SqlSource
负责根据用户传递的parameterObject动态生成SQL语句,并将信息封装在BoundSql对象中,并返回结果。
BoundSql
表示动态生成的SQL语句以及对应的参数信息。
Mybatis层次结构
如果您发现本文有帮助,请不要忘记向我们发送3 位数字的链接,例如转发或评论。
下次见!获取方式:点赞、评论、关闭~
了解更多JAVA知识技能,关注博主私信(03)
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/84247.html