Mybatis 核心分析

一、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 解析流程

在这里插入图片描述

结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8404.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

增强深度学习与对抗训练对癫痫发作的鲁棒预测

标题:Augmenting Deep Learning with Adversarial Training for Robust Prediction of Epilepsy Seizures Abstract: 癫痫是一种慢性疾病,涉及异常的大脑活动,导致患者失去对意识或运动活动的控制。因此,在癫痫发作之前检测出癫…

使用TIA博途自带的函数实现用户登录并显示用户名的具体方法

使用TIA博途自带的函数实现用户登录并显示用户名的具体方法 本例以TP1200 Comfort精智触摸屏为例进行说明: 如下图所示,打开TIA博途软件,添加一个TP1200触摸屏,找到左侧项目树中的“用户管理”,添加一个用户:abc,密码:1234, 如下图所示,添加一个画面,这里命名为:…

12.JavaWeb-Node.js

1.Node.js的概念 传统的Web服务器中,每个请求都会创建一个线程,这会导致线程数的增加,从而影响服务器的性能和扩展性,Ryan Dahl借助Chrome的V8引擎提供的能力实现了Node.js——可以在服务端运行的JavaScript(可以把Nod…

利用Dockerfile构建带sshd、jdk服务的自定义镜像

什么是Dockerfile? Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像 dockerfile 的基本结构 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。 一般的,Dockerfile 分为四部分&#…

TypeScript 5.1发布,新功能更新

文章目录 1:返回类型增加undefined2:getter可以设置和 setter 的不相关类型3:对 JSX 元素和 JSX 标签的异步支持4:支持命名空间属性名称 JSX5:typeRoots在模块更新6:JSX 标签的链接游标7:param …

PHP:查询数据库,并将数据传给前端(在script中直接嵌套php语句)

例子&#xff1a;在php中定义数据&#xff0c; 并将数据通过js在控制台输出 <script><?php// 在这里插入你的PHP代码&#xff0c;例如执行查询操作获取数据$data array(array(name > Alice, age > 25),array(name > Bob, age > 30),array(name > Ch…

4.39ue4:ue4表格设置、读取

1.创建表格&#xff0c;内容浏览器&#xff0c;右键&#xff0c;其他&#xff0c;数据表格&#xff0c;下拉选择一个数据结构类型的起始项。 2.被选择的数据结构将以表格的形式列出数据。 3.使用方式&#xff1a; i: 输出一行数据&#xff08;text&#xff09; ii&#xff…

SparkSQL的数据结构DataFrame构建方式(Python语言)

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据&#xff0c;其提供了两个操作SparkSQL的抽象&#xff0c;分别是DataFrame和DataSet&#xff0c;spark2.0之后&#xff0c;统一了DataSet和DataFrame&#xff0c;以后只有DataSet。 以Python、R语言开发Spark&#xff0c;使…

SpringBoot 的 概念、创建和运行

目录 1.什么是Spring Boot&#xff1f; 为什么要学Spring Boot&#xff1f; SpringBoot的优点 Spring Boot 项目创建 前置工作&#xff1a;配置国内源 使用 idea 创建 Spring Boot 项目 网页版创建&#xff08;了解&#xff09; 拓展&#xff1a;删除 项目中无用的目录和…

quiche编译

netty http3使用了rust语言的quiche&#xff0c;quiche使用了c语言的boringssl&#xff0c; 网上没有找到编译好的quiche&#xff0c;只能自己搭建rust环境编译 1、rust安装 见官网https://www.rust-lang.org/tools/install 我是用的是windows的ubuntu&#xff0c;所以直接使…

web学习--maven--项目管理工具

写在前面&#xff1a; 这学期搞主攻算法去了&#xff0c;web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

debian linux安装配置企业私有网盘

一、适用环境 1、中小型企业的某些部门之间经常要进行数据的交换与共享时&#xff0c;则可使用企业内部专业的服务器&#xff0c;把剩余的硬盘存储容量配置成为共享网盘的形式&#xff0c;供部门之间进行数据交换。 2、可将多个硬盘通过debian Linux系统组成软阵列的1个逻辑盘…