MyBatis底层源码分析

🎄欢迎来到@边境矢梦°的csdn博文🎄

🎄本文主要梳理MyBatis底层源码分析 🎄
🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕    

目录

🍀主要Debug的点

🌻完成读取配置文件并解析

 🌸一图全知:

🍁动态代理

📢一图全知: 


🍀主要Debug的点

🌻完成读取配置文件并解析

📌SqlSessionFactoryBuilder 是 MyBatis 框架中的一个关键类,它用于创建 SqlSessionFactory 实例SqlSessionFactory 是 MyBatis 的核心类之一,负责管理数据库连接、执行 SQL 语句和处理事务等操作。

📌XMLConfigBuilder 是 MyBatis 中用于解析 MyBatis 配置文件(通常是 mybatis-config.xml的类。这个配置文件包含了有关数据库连接、映射器(Mappers)、缓存、数据源等方面的配置信息。XMLConfigBuilder 的主要任务是将这些配置信息解析成 Java 对象,用于配置 MyBatis 框架的各个组成部分。

📌XMLMapperBuilder 是 MyBatis 中的一个关键类,它用于解析映射器(Mapper)XML文件,其中包含了 SQL 语句的定义以及与数据库表的映射配置。XMLMapperBuilder 负责将 XML 文件中的内容解析为 MyBatis 可以理解的配置信息,并将这些配置信息与具体的 Mapper 接口关联起来。

📌XPathParser 是 MyBatis 中的一个实用工具类,用于解析 XML 配置文件和处理 XPath 表达式。它的主要作用是帮助 MyBatis 解析各种 XML 文件,如 MyBatis 配置文件(mybatis-config.xml)、映射器文件(Mapper.xml)等,以获取配置信息、SQL 语句等内容。

📌MapperBuilderAssistant 是 MyBatis 中的一个关键类,它主要用于帮助解析和构建映射器(Mapper)接口中的 SQL 方法与映射文件(Mapper XML 文件)之间的关联关系。这个类通常在解析 Mapper XML 文件时被使用,以便将 XML 中的配置信息与 Java 接口的方法绑定在一起。用于协助构建 Mapper 接口的映射配置。MapperBuilderAssistant 的主要作用是将 Mapper 接口方法与对应的 SQL 语句关联起来,并完成其他映射配置的一些工作。

📌XMLStatementBuilder 是 MyBatis 中用于解析映射器文件(Mapper XML 文件)中 <select>, <insert>, <update>, <delete> 等 SQL 语句节点的重要类。它主要负责将这些节点中的信息解析为 MappedStatement 对象,以便 MyBatis 能够执行相应的 SQL 操作。

📌MappedStatement 是 MyBatis 中的一个重要类,它用于描述和存储映射器文件(Mapper XML 文件)中定义的 SQL 语句的相关信息。每个 SQL 语句在 MyBatis 中都对应一个 MappedStatement 对象,该对象包含了 SQL 语句的各种配置信息,以便 MyBatis 执行相应的数据库操作。

 🌸一图全知:

📢要图的私信我


一些截图

XMLStatementBuilder

Statement就是存放SQL语句的 

 将SQL语句封装到Configuration中

 每一句SQL语句都是一次循环, 将其放在mappedStatement中以及放在Configuration配置对象中, 就这样SQL语句就解析完毕了

 


🍁动态代理

执行SQL语句的执行过程

monsterMapper是代理对象不是MonsterMapper的对象, 因为MonsterMapper是接口, 为了更好的执行只能用动态代理的方式进行执行

 

 这里的键是Method

 MapperProxy的方式执行

 根据类型进行判断, 需要执行哪种类型的语句

 根据类型判断选择执行INSERT

param = this.method.convertArgsTosqlCommandParam(args);是对参数的封装
以下是result = this.rowCountResult(sqlSession.insert(this.command.getName(), param));底层的执行

 去this.delegate.update(ms, parameterObject)底层, 来到BaseExecutor

this.clearLocalCache 方法是 MyBatis 中用于清空当前 SQL 会话的本地缓存的一种方式。通过调用该方法,可以确保后续的 SQL 执行都会从数据库中获取最新的结果。

 

 

 

 

📢一图全知: 

(理清这个图还是不容易, 但是理清就全清楚了)

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

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

相关文章

oracle创建数据库,导入dmp操作全家桶

背景&#xff1a;小明在一家IT公司就职&#xff0c;通过查看项目&#xff0c;公司使用的是oracle&#xff0c;几天后&#xff0c;经理要求他从服务器导入数据库到公司服务器&#xff0c;聪明的小明就开始干了起来&#xff0c;整理如下教程。 说明&#xff1a;此次演示环境oracl…

C语言 —— 指针

目录 1. 指针是什么&#xff1f; 2. 指针和指针类型的关系 2.1 指针的解引用 2.2 指针-整数 3. 野指针 3.1 野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 3.2 如何规避野指针 4. 指针运算 4.1 指针-整数 4.2 指针-指针 指针-指针的使用 4.3 指针的关系运…

代码更换了目录,没有任何变更,但Idea编辑器却提示所有代码都变更了?

开发环境&#xff1a; springboot 2.4.3idea 2020 问题描述&#xff1a; 1、代码copy到U盘了&#xff0c;今天用idea打开U盘代码&#xff0c;却提示所有代码都被修改了 2、diff 文件看了&#xff0c;其实并没有任何修改&#xff0c;因为就算不小心误改了&#xff0c;也不能全…

Stable Diffusion绘画,卡通,教室

1 girl, parted lips, blush, makeup, light smile, school uniform, classroom, light rays, glow, thighs, collarbone, narrow waist, (masterpiece), wallpaper 1个女孩&#xff0c;双唇&#xff0c;腮红&#xff0c;化妆&#xff0c;浅笑&#xff0c;校服&#xff0c;教室…

单链表经典OJ题

目录 ​编辑 题目&#xff1a; 一、移除链表元素&#xff1a; 本质&#xff1a; 解题思路&#xff1a; 本题分为两种解法&#xff1a; 我们使用解法二&#xff1a; 注意事项&#xff1a; 完整代码&#xff1a; 题目&#xff1a; 一、移除链表元素&#xff1a; 本质&…

C++11智能指针

目录 一、什么是智能指针&#xff1f;二、为什么需要智能指针&#xff1f;三、内存泄漏3.1 什么是内存泄漏&#xff1f;内存泄漏的危害是什么&#xff1f;3.2 内存泄漏的分类3.3 如何检测内存泄漏&#xff1f;3.4 如何避免内存泄漏&#xff1f; 四、智能指针的使用及原理4.1 RA…

Kotlin vs Java:为什么Springboot官方教程选择了Kotlin?

导语 作为Java开发者的你&#xff0c;是否在为寻找Java的替代品而烦恼&#xff1f;担心受知识产权问题困扰&#xff1f;别担心&#xff0c;Kotlin来了&#xff01;它是你的救星&#xff0c;也是Springboot官网教程的选择。想知道为什么吗&#xff1f;那就往下翻吧&#xff01;…

NeurIPS 2023 | MQ-Det: 首个支持多模态查询的开放世界目标检测大模型

目前的开放世界目标检测模型大多遵循文本查询的模式&#xff0c;即利用类别文本描述在目标图像中查询潜在目标。然而&#xff0c;这种方式往往会面临“广而不精”的问题。一图胜千言&#xff0c;为此&#xff0c;作者提出了基于多模态查询的目标检测&#xff08;MQ-Det&#xf…

傅里叶变换和其图像处理中的应用

以下部分文字资料整合于网络&#xff0c;本文仅供自己学习用&#xff01; 一、为什么要在频域进行图像处理&#xff1f; 一些在空间域表述困难的增强任务&#xff0c;在频率域中变得非常普通 滤波在频率域更为直观&#xff0c;你想想嘛&#xff0c;所谓滤波&#xff0c;就是…

KOSMOS-2.5:密集文本的多模态读写模型

Overview 总览摘要1 引言2 KOSMOS-2.52.1 模型结构2.1 图像和文本表征2.3 预训练数据2.4 数据处理2.5 过滤与质量控制 3 实验3.1 评估3.2 实现细节3.3 结果3.4 讨论 4 相关工作4.1 多模态大语言模型4.2 图文理解 5 总结与展望 总览 题目: KOSMOS-2.5: A Multimodal Literate M…

通过jsoup抓取谷歌商店评分

文章目录 背景实现是否下架预警评分 总的工具类,测试 背景 在谷歌上面发布包,有时候要看看评分,有时候会因为总总原因被下架,希望后台能够对评分进行预警,和下架预警 实现 测试地址: https://play.google.com/store/apps/details?idcom.tencent.mm 通过jsoup解析页面,然后获…

Python学习----Day07

函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。函数能提高应用的模块性&#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c;这被叫做…

苍穹外卖(五) 微信小程序

项目应用: 使用微信小程序完成客户端开发并基于微信登录实现小程序的登录功能如果是新用户需要自动完成注册 微信小程序开发 介绍 小程序是一种新的开放能力&#xff0c;开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播&#xff0c;同时具有出色的使用体验…

C# 图解教程 第5版 —— 第3章 C# 编程概述

文章目录 3.1 一个简单的 C# 程序&#xff08;*&#xff09;3.2 标识符3.3 关键字3.4 Main&#xff1a;程序的起始点&#xff08;*&#xff09;3.5 空白3.6 语句&#xff08;*&#xff09;3.7 从程序中输出文本3.7.1 Write&#xff08;*&#xff09;3.7.2 WriteLine&#xff08…

【C++进阶】:C++类型转换

C类型转换 一.C语言里的类型转换二.C语音类型转换的一些弊端三.C的四种类型转换1.static_cast2.reinterpret_cast3.const_cast4.dynamic_cast 一.C语言里的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者…

Python实验三

1&#xff1a;编程统计英文句子中的单词出现的次数。 要求&#xff1a;输出结果为按照单词在句子中出现的次数降序排列。 提示&#xff1a;用split&#xff08;&#xff09;拆分字符串 # 1&#xff1a;编程统计英文句子中的单词出现的次数。 # 要求&#xff1a;输出结果为按照…

Dijkstra求最短路(图解)

你好&#xff0c;我是Hasity。 今天分享的内容&#xff1a;Dijkstra求最短路这个题目 Dijkstra求最短路I 题目描述 给定一个 n个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n号点的最短距离&#xff0c;如果无…

Windows 中环境变量的查看与设置

接触了LLM应用开发后&#xff0c;经常要用到环境变量的设置&#xff08;openAI apikey啥的&#xff09; 但是老忘记&#xff0c;今天来学习和总结一下 主要用到以下几种&#xff1a;使用 PowerShell、CMD 和 Python 来查看和设置环境变量 文章目录 1. PowerShell查看环境变量&a…

【Linux】HTTP协议

文章目录 &#x1f4d6; 前言1. 认识URL && 引入http协议2. http协议格式2.1 宏观格式&#xff1a;2.2 实验演示&#xff1a; 3. http的方法3.1 GET方法&#xff1a;3.2 POST方法&#xff1a;3.3 GET vs POST&#xff1a; 4. HTTP的报头和状态码5. http的cookie5.1 htt…

估算总体标准差的极差均值估计法sigma = R/d2

总体标准差的估算值可以通过将平均极差除以合适的常数因子d2来计算。这个估算方法是用于估算总体标准差的一种常见方法&#xff0c;尤其在质量控制和过程监控中经常使用。 总体标准差的估算值 (平均极差) / d2 其中&#xff1a; "总体标准差的估算值" 表示用极差…