MyBatis的工作原理

news2024/11/26 5:52:32

 

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 或者基本数据类型,并将最终结果返回。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运动耳机买什么样的好、最好用的运动耳机排行榜

2月中旬,气温回暖,路面冰雪融化,又到了运动的好时节。难道还要每天上下班后就回家躺着嘛,浪费时间可耻,为什么不做一些更有意义的事情呢?即刻出发,开始空余,享受运动锻炼的乐趣&…

如何开发一个小游戏?其中有什么难点

如果仅仅针对个人开发者来讲,要独立开发一款大型游戏几乎无可能,更大成功的可能还是开发一款类似《羊了个羊》这样洗脑的小程序游戏。 所以这里主要论述小游戏开发的情况,也就是小程序游戏,首先从小游戏的开发流程来看&#xff1…

大数据之-Nifi-认识Nifi_Nifi的核心概念_Nifi核心架构_Nifi的性能_Nifi的关键特性---大数据之Nifi工作笔记0001

用来管理不同系统之间的信息流的工具. ETL工具 kettle是数据的转换 比如kettle来说,如果需要做ETL的数据特别大量特别多,他就会支持不了数据的转换会有崩溃的现象 可以看到nifi解决的是dataflow的问题,解决的是数据流的问题 可以看到Nifi的用处,用来处理数据的分发,是BS架构…

jenkins实现接口自动化持续集成(python+pytest+ Allure+git)

在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,通过设置定时构建实现自动触发脚本执行&am…

1.6实验6:配置多区域OSPF

1.4.1实验6:配置多区域OSPF 实验需求实现OSPF多区域配置阐明OSPF的LSA的类型阐明OSPF引入外部路由的配置方法阐明向OSPF引入缺省路由的方法实验拓扑配置多区域OSPF如图1-16所示。 图1-16 配置多区域OSPF 实验步骤[1] IP地址配置

Seata源码学习(二)-源码入口

Seata源码剖析-源码入口 Seata客户端启动 首先一个Seata的客户端启动一般分为几个流程: 自动加载各种Bean及配置信息初始化TM初始化RM(具体服务)初始化分布式事务客户端完成,代理数据源连接TC(Seata服务端&#xff…

第三部分:(主从)复合句——第二章:定语从句

若多件事不一样重要,连接到一块就构成了主从复合句,主要的事情写成主句,次要的事情写成从句,从句虽然不是主要描述的事情,但从句是考试常考的地方,从句有很多复杂的变化,前面需要加上一些连接词…

118.(leaflet篇)leaflet空间判断-点与geojson面图层的空间关系(turf实现)

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

【算法自由之路】 贪心算法

贪心算法 局部最右得到全局最右难点在于如何证明局部最优可以得到全局最优堆 和 排序 是贪心算法最常用的实现算法 贪心算法作为最符合自然智慧的算法&#xff0c;思路是从小部分取最优从而获得最终的最优&#xff0c;但是难得是怎样获取部分最优才能得到全局最优。 有时候我…

9个EXCEL舍入函数公式的用法和实例

用法和实例 1. ROUND ROUND函数可以将数字四舍五入到指定的小数位数。 语法&#xff1a;ROUND(number, num_digits) number&#xff1a;要四舍五入的数字。 num_digits&#xff1a;要保留的小数位数。 举例&#xff1a; ROUND(3.14159,2)&#xff0c;结果为3.14 ROUND(3.141…

如何在Excel中向下拉列表中添加条件

在Excel中向下拉列表中添加条件 创建矩阵型数据集创建下拉列表创建第一个下拉列表创建第二个下拉列表你可以使用Microsoft Excel下拉列表来显示一个简单的列表,尽管有时需要更多的控制。假设你的人员分散在四个地区:北部、南部、东部和西部。你希望按地区与人员合作,而不是与…

界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…

【LeetCode】剑指 Offer 04. 二维数组中的查找 p44 -- Java Version

题目链接&#xff1a; https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 1. 题目介绍&#xff08;04. 二维数组中的查找&#xff09; 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递…

为什么要有分布式锁?

Redis避坑指南&#xff1a;为什么要有分布式锁&#xff1f;作者&#xff1a;京东保险 张江涛1、为什么要有分布式锁&#xff1f;JUC提供的锁机制&#xff0c;可以保证在同一个JVM进程中同一时刻只有一个线程执行操作逻辑&#xff1b;多服务多节点的情况下&#xff0c;就意味着有…

2023最新Java面试手册(性能优化+微服务架构+并发编程+开源框架)

Java面试手册 一、性能优化面试专栏 1.1、 tomcat性能优化整理 1.2、JVM性能优化整理 1.3、Mysql性能优化整理 二、微服务架构面试专栏 2.1、SpringCloud面试整理 2.2、SpringBoot面试整理 2.3、Dubbo面试整理 三、并发编程高级面试专栏 四、开源框架面试题专栏 4.1、Sprin…

勒索软件、网络钓鱼、零信任和网络安全的新常态

当疫情来袭时&#xff0c;网络罪犯看到了他们的机会。随着公司办公、政府机构、学校和大学从以往的工作模式转向远程线上办公模式&#xff0c;甚至许多医疗保健设施都转向线上&#xff0c;这种快速的过渡性质导致了不可避免的网络安全漏洞。消费者宽带和个人设备破坏了企业安全…

name不能作为js的变量名

今天看红宝书的时候&#xff0c;看中到&#xff1a; null和undefined值没有toString()方法&#xff0c;而String()却能够将null和undefined转化成对应的字符串。 想着去尝试一下&#xff0c;用到了name作为变量值&#xff0c;发现让name为null或undefined的时候&#xff0c;就…

(C00102)基于Servlet的在线服装销售管理系统——有文档

基于Servlet的在线服装销售管理系统项目简介项目获取开发环境项目技术运行截图项目简介 本项目是基于J2EE的servlet的在线服装销售管理系统&#xff0c;衣服、裤子、上衣等等&#xff0c;本项目有三种权限&#xff1a;游客、用户、管理员 游客&#xff1a;服装浏览、加入购物车…

“鸡血驱动”为CS:GO、LOL注入“强心剂”!英特尔锐炫A750显卡实测

自推出锐炫系独显以来&#xff0c;英特尔一直在为自家的独显产品的市场竞争力添砖加瓦&#xff0c;其中就包括了驱动程序的持续更新优化和市场策略的调整。在驱动部分&#xff0c;在去年底31.0.101.3802版的小优化更新之后&#xff0c;今年2月初又陆续更新了31.0.101.4091 WHQL…

手把手教你二进制安装生产环境 K8s 多 master 节点高可用集群详细图文教程

目录 一、集群环境准备 1.1 kubeadm 和二进制安装 k8s 适用场景分析 1.2 多 master 节点高可用架构图 二、基础环境配置&#xff08;以下操作所有节点都得执⾏&#xff09; 2.1 初步的环境初始化 2.2 关闭交换分区 swap 提升性能 2.3 修改机器内核参数 2.4 配置阿里云…