【MyBatis】MyBatis 的解析和运行原理
MyBatis 编程步骤
1、 创建 SqlSessionFactory
2、通过 SqlSessionFactory 创建 SqlSession
3、通过 sqlsession 执行数据 库操作
4、调用 session.commit()提交事务
5、调用 session.close()关闭 会话
MyBatis 的工作原理
1)读 取 MyBatis 配置 文件:mybatis-config.xml 为MyBatis的全局配置文 件,配 置了MyBatis的运行环境等信息,例如数据库连接信息。
2)加 载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,
需要在MyBatis配置文件mybatis-config.xml 中加载 。mybatis-config.xml 文件可以加载多个映射文件 ,每个文件对应数据库中的一张表。
3)构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。
4)创建会话对象 :由会话工厂创建 SqlSession 对象 ,该 对象中包含了执 行 SQL 语句的 所有方法。
5)Executor 执 行器:MyBatis 底 层定 义 了一个 Executor 接口来操 作数据 库,它将根 据
SqlSession 传递 的参数动态地 生成需要执行的 SQL 语句 ,同 时负责查询缓 存的维护。
6)MappedStatement 对 象 :在 Executor 接口的执 行方法中有 一 个 MappedStatement
类 型 的 参 数 ,该 参 数 是 对 映 射 信 息 的 封 装 ,用于存储要映射的 SQL语句的 id 、参 数 等 信 息。
7) 输入 参数 映射 : 输 入参 数 类 型可以 是 Map 、List 等集合类 型 , 也可以是基本数据类型
和 POJO 类型 。输入参数映射过程类似 于JDBC preparedStatement 对象 设 置 参 数 的过程。
8)输 出结果映 射:输出结果类型可以是 Map 、 List 等集合类型,也可以是基本数据类型和 POJO 类型 。输出结果映射过程类似于 JDBC 对结果集 的解析过 程。
MyBatis 的功能架构
把 Mybatis 的功能架构分为三层:
API 接口层:提 供给外部 使用的接口 API ,开发人员通过这些本地 API 来操纵数据库。接口 层一接收到调用请求就会调用数据处理层来完成具体的 数据处理。
数据处理层:负 责具体的 SQL 查 找、SQL 解 析、SQL 执 行和执行 结果 映射处理 等 。它 主要 的目的是根据调用 的请求完成一次数 据库操作。
基础支撑层:负责最基础的功能支撑,包括连接管理、事 务管理、配 置加载和缓存处理,这些都是共用的东西 ,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
MyBatis 的框架架构设计是怎么样的
MyBatis 的 初始化 ,会 从 mybatis-config.xml
配 置文件 ,解析构 造 成 Configuration
这个 类.
(1) 加 载 配 置 : 配 置来 源 于 两 个 地 方 , 一 处是配置文 件 , 一 处是 Java 代码 的 注 解 , 将SQL的配置信息加载成 为一 个个MappedStatement
对 象( 包括了传入 参数映射 配 置、执行的 SQL 语句、结果映射配 置 ),存储在内存 中。
(2)SQL 解 析 :当 API接口层接收到调用请求时,会接收到传入SQL 的 ID 和传入对象 ( 可以 是 Map 、 JavaBean 或者基本数据类型 ),Mybatis 会 根据 SQL 的 ID 找到对应的 MappedStatement
, 然后根据传入参数对象对 MappedStatement
进行解析 , 解析后可以得到最终要执行的 SQL 语句和参数。
(3)SQL 执行 :将最终得到的SQL 和参数拿到数据库进行执行,得到操作数据库的结果。
(4)结果映射 : 将操作数据库的结果按照映射的配置进行转 换 , 可以转 换成 HashMap 、 JavaBean 或者基本数据类型 ,并将最终结果返回。
本文地址:https://blog.csdn.net/Black_Customer/article/details/107417288
上一篇: 儿子作业爆笑举动
推荐阅读
-
SpringMVC的工作流程?Mybatis和hibernate区别?
-
MyBatis的结构和配置
-
spring集成mybatis原理(spring和mybatis整合步骤)
-
Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
-
Mybatis中SqlSessionFactory和SqlSession学习和原理
-
mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析
-
MyBatis中XML和注解的对比及使用
-
Mybatis中的动态SQL语句解析
-
在mybatis和PostgreSQL Json字段作为查询条件的解决方案
-
hibernate和mybatis的区别?