MyBatis底层源码分析

这篇具有很好参考价值的文章主要介绍了MyBatis底层源码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

目录

🍀主要Debug的点

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

 🌸一图全知:

🍁动态代理

📢一图全知: 


MyBatis底层源码分析,Java,mybatis,java,数据库

🍀主要Debug的点

MyBatis底层源码分析,Java,mybatis,java,数据库

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

📌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 执行相应的数据库操作。

 🌸一图全知:

MyBatis底层源码分析,Java,mybatis,java,数据库

📢要图的私信我


一些截图

XMLStatementBuilder

Statement就是存放SQL语句的MyBatis底层源码分析,Java,mybatis,java,数据库 

 将SQL语句封装到Configuration中

MyBatis底层源码分析,Java,mybatis,java,数据库

MyBatis底层源码分析,Java,mybatis,java,数据库

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

MyBatis底层源码分析,Java,mybatis,java,数据库

 


🍁动态代理

执行SQL语句的执行过程

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

MyBatis底层源码分析,Java,mybatis,java,数据库

 MyBatis底层源码分析,Java,mybatis,java,数据库

 这里的键是MethodMyBatis底层源码分析,Java,mybatis,java,数据库

 MapperProxy的方式执行MyBatis底层源码分析,Java,mybatis,java,数据库

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

MyBatis底层源码分析,Java,mybatis,java,数据库 根据类型判断选择执行INSERT

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

MyBatis底层源码分析,Java,mybatis,java,数据库

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

MyBatis底层源码分析,Java,mybatis,java,数据库

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

MyBatis底层源码分析,Java,mybatis,java,数据库 

MyBatis底层源码分析,Java,mybatis,java,数据库

 MyBatis底层源码分析,Java,mybatis,java,数据库

 MyBatis底层源码分析,Java,mybatis,java,数据库

MyBatis底层源码分析,Java,mybatis,java,数据库 

MyBatis底层源码分析,Java,mybatis,java,数据库

📢一图全知: 

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

MyBatis底层源码分析,Java,mybatis,java,数据库文章来源地址https://www.toymoban.com/news/detail-713590.html

到了这里,关于MyBatis底层源码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis实现 Java 对象和数据库中日期类型之间的转换(超详细)

    数据库存储的时间字段的类型是datetime Java实体类的时间字段类型是Date 需求:响应前端的时间字段格式为”yyyy-MM-dd HH:mm:ss“ 1、定义resultMap 定义 Java 对象和数据库表字段的对应关系,在 mapper.xml 文件中使用 #{属性名,jdbcType=数据库字段类型} 来进行参数传递和结果集映射,例如

    2024年02月15日
    浏览(44)
  • 【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性

    今天遇到了一个bug,大概就是数据库(Mysql)中有一个 type 类型字段,数据类型为json,大概是这样的:[“苹果”,“香蕉”,“葡萄”]的数据格式,这个bug的问题所在呢就是查询后这个json格式的数据无法映射到我们实体类的属性上,解决方案如下: 实体类的配置: @TableField

    2024年02月15日
    浏览(45)
  • MyBatis实现 Java 实体类和数据库中日期类型之间的转换(超详细)

    数据库存储的时间字段的类型是datetime Java实体类的时间字段类型是Date 需求:响应前端的时间字段格式为”yyyy-MM-dd HH:mm:ss“ 1、定义resultMap 定义 Java 对象和数据库表字段的对应关系,在 mapper.xml 文件中使用 #{属性名,jdbcType=数据库字段类型} 来进行参数传递和结果集映射,例如

    2024年02月20日
    浏览(51)
  • 根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)

    目录 一、数据库设计 1.1、数据库选择 1.2、环境配置 1.3、建库建表接口实现 1.4、封装数据库操作 1.5、针对 DataBaseManager 进行单元测试 1.6、心得 MySQL 是我们最熟悉的数据库,但是这里我们选择使用 SQLite,原因如下: SQLite 比 MySQL 更轻量:一个完整的 SQLite 数据库,只有一个单

    2024年02月13日
    浏览(43)
  • 毕业设计——基于SpringBoot+Mybatis+Thymeleaf架构实现的员工管理系统(源码+数据库)

    完整项目地址:https://download.csdn.net/download/lijunhcn/88430276 SpringBoot整合CRUD实现员工管理案例,将Mybatis整合到原项目中,加入了数据库,添加了日期选项的控件。 环境要求 JDK8以上 IDEA MySQL8 Maven3 需要熟练掌握MySQL数据库,SpringBoot及MyBatis知识,简单的前端知识; 数据库环境 创建

    2024年02月03日
    浏览(46)
  • 深入分析Java中的PriorityQueue底层实现与源码

    本文分享自华为云社区《滚雪球学Java(70):深入理解Java中的PriorityQueue底层实现与源码分析》,作者: bug菌。 @[toc] PriorityQueue是Java中一个非常常用的数据结构,它可以实现基于优先级的排序,常用于任务调度、事件处理等场景。本文将深入探讨Java中PriorityQueue的底层实现与源

    2024年03月19日
    浏览(42)
  • java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

    对于数据结构我这边只告诉你右边框框里的 栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈 栈就像一个弹夹 队列先进先出后进后出 队列像排队 链表查询满 但是增删快(相对于数组而言) 拓展:还有一个双向链表 他在查询元素的时候更快些,因为他在拿到一个元素

    2024年02月05日
    浏览(46)
  • mybatis源码学习之mybatis执行流程分析

    mybatis全局配置文件中涉及的标签如下图所示 下面我们来进行源码分析。 配置文件的解析创建SqlSessionFactory 配置文件的解析主要涉及到的类如下:XMLConfigBuilder、XPathParser、XPath、XNode,其中XPath、XNode是对 1、build方法内部首先会根据输入流等信息创建XMLConfigBuilder类的实例对象,

    2024年02月07日
    浏览(46)
  • 【Mybatis源码分析】Mybatis中的反射(MetaObject)详细讲解

    在使用Mybatis,编写DQL语句时,查询结果可能会是多个,多变量指定肯定是不现实的。而Mybatis可以进行映射,将JDBC返回的结果映射到实例类或者Map对象中,方便开发者直接使用返回对象,就可以得到从数据库取出来的结果。 映射原理大伙都知道是利用了反射(因为咱就只是通

    2023年04月08日
    浏览(74)
  • Java中TreeSet的基本介绍,细节讨论,使用注意事项,常用方法,底层源码分析

    TreeSet 是 Java 中的一个有序集合实现,它基于红黑树数据结构来存储元素, 可以保持元素的自然顺序(默认情况下升序)或者根据自定义比较器来进行排序 。下面是关于 TreeSet 的基本介绍、细节讨论、使用注意事项、常用方法以及一些底层实现细节。 基本介绍: TreeSet 是

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包