7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

这篇具有很好参考价值的文章主要介绍了7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文:juejin.cn/post/7283798251403821056

本文笔者计划从全局角度来对Mybatis的整体架构及进行一次回顾和总结,希望能帮助你更加透彻的理解Mybatis。

1、前言

MyBatis是一款ORMObject-Relational Mapping)框架,其主要用于将Java对象与关系数据库之间进行映射,凭借其轻量性、稳定性以及广泛的开源社区其受到了广大开发者的追捧。

MyBatis为我们做了哪些事情呢?其实,总结来看主要有如下几点:

  1. SQL映射配置MyBatis使用XML或注解配置文件来定义SQL查询、插入、更新和删除操作,以及与数据库表之间的映射关系。这使得开发者能够将SQL语句与Java代码分离,提高了代码的可维护性。
  2. 动态SQLMyBatis支持动态SQL,允许根据不同的条件生成不同的SQL语句。这使得构建复杂的查询变得更加灵活和方便。
  3. 参数映射MyBatis能够将Java对象的属性与SQL语句中的参数进行映射,无需手动编写繁琐的参数传递代码。
  4. 结果集映射MyBatis支持将SQL查询结果映射到Java对象,自动将数据库表中的列值赋给Java对象的属性,大大简化了数据的读取和处理。
  5. 事务管理MyBatis可以与Java的事务管理框架(如Spring)无缝集成,确保数据库操作的原子性和一致性。
  6. 连接池集成MyBatis可以与常见的Java连接池库(如Apache DBCP、C3P0、HikariCP)集成,以管理数据库连接的获取和释放。
  7. 二级缓存MyBatis支持二级缓存,可以在多个会话之间共享数据,提高性能。

知晓了MyBatis的功能特性后,接下来让我们一起来看看MyBatis内部是通过哪些组件来支撑起这些功能的。

推荐一个开源免费的 Spring Boot 实战项目:

https://github.com/javastacks/spring-boot-best-practice

2、总览MyBatis

对于Mybatis的架构大致可以分为三层:基础支持层核心处理层接口层。

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

或许,你会觉得上图过于复杂,难以理解。如果此刻你也有这样的疑惑,不要慌。不妨跟着笔者思路来进行梳理。

首先,使用MyBatis概括来看大致包括如下几步:

  1. 定义接口,配置相关的xml文件信息
  2. 加载接口的配置文件,解析相关配置文件
  3. 生成接口代理类,执行相关sql

由于在使用MyBatis过程中会编写相关的配置文件,所以Mybatis内部必然需要相应组件来支撑配置文件的解析,这些也就构成了底层的基础支撑层。既然会解析配置文件,那是不是必然会涉及到资源加载、配置解析等模块?

进一步,当配置文件解析完成后,下一步就是生成代理,然后执行sql,此时所涉及的也就是核心处理层中的sql执行,sql解析等。更进一步,执行sql过程中为了避免Connection频繁创建,是不是需要对连接进行池化操作?所以MyBatis内部会抽象出一个数据源模块来统一管理连接。

除此之外,对于sql执行过程中的事务是不是也需要控制?所以MyBatis还有事务管理模块来对sql执行过程中的事务进行管理。

事实上,你只需要记住Mybatis的使用过程为:定义接口,提供配置文件,而后生成代理,执行****Sql 即可。以此进行发散,自然而然能扩展出上图所示内容,根本没必要死记硬背。

熟悉了MyBatis的整体架构后,我们接下来看Mybatis内部执行sql的大致流程:

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

接下来,我们将主要围绕这张图中内容进行总结分析。

3、配置文件解析

配置文件解析过程大致如下所示:

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

事实上,MyBatis内部对于配置文件解析的过程可以概括如下:

  1. 加载配置文件:MyBatis首先加载主配置文件(通常是mybatis-config.xml),并创建一个Configuration对象来表示整个MyBatis配置。
  2. 解析主配置文件:MyBatis使用XML解析器解析主配置文件,该文件包含了关于数据源、插件、类型别名、缓存等全局配置信息。这些配置会被存储在Configuration对象中。

而参与配置文件解析的都继承与BaseBuilder,其体系结构如下所示:

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!其中

  1. XMLStatementBuilder :这个类用于解析映射文件中的 <select><insert><update><delete> 等标签,构建与 SQL 语句相关的对象(如 MappedStatement),包括 SQL 语句的解析、参数映射、结果映射等。
  2. XMLMapperBuilderXMLMapperBuilder 用于解析映射文件(通常是 Mapper.xml 文件),负责构建与映射文件相关的对象,包括映射文件的解析、SQL 语句的构建、参数映射、结果映射、缓存配置等。
  3. XMLConfigBuilderXMLConfigBuilder 用于解析主配置文件(通常是 mybatis-config.xml 文件),负责构建与全局配置相关的对象,包括数据源配置、类型别名配置、插件配置、缓存配置等。

总结来看,对于MyBatis的加载过程来说,其在处理配置文件信息时,首先,会传递配置文件所在位置信息,然后再调用框架提供的****SqlSessionFactorybuild方法便会根据传入路径信息去加载相关的配置文件,并进行解析。而解析的内容会存放到的configuration之中,进而方便后续组件的使用。

4、代理构建

当配置文件解析,下一步就是通过SqlSessiongetMapper方法来构建一个接口对应的代理类,这一过程大致如下:

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

这一过程中涉及的组件主要包括MapperProxyFactory、MapperRegistry、MapperProxy,更加详细的分析可参考Mybatis流程分析(六): Mybatis中方法和sql语句的桥梁——MapperProxy, 总之这一过程的本质就是通过****Jdk动态代理的方式返回一个实现接口的实例对象

5、sql执行

当配置文件解析完成,接口相应的代理类构建完毕后,下一步要做的就是sql的执行,这一过程逻辑大致如下所示:

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

这一部分的底层逻辑就是原生JDBC操纵数据库的那一套逻辑,即

  1. 创建SQL语句:即创建StatementPreparedStatementCallableStatement对象,分别用于执行不同类型的SQL语句。
  2. 执行SQL查询:使用创建的StatementPreparedStatement对象来执行SQL查询。
  3. 处理查询结果:通过ResultSet对象来处理查询的结果数据。

6、总结

最后,我们再来一下Mybatis内部对于sql执行的大致步骤:

  1. 创建 SqlSessionFactory:使用Mybatis首先需要创建一个 SqlSessionFactory 对象,这通常通过读取MyBatis 的主配置文件(mybatis-config.xml)并使用 SqlSessionFactoryBuilder 来实现。SqlSessionFactory 负责创建数据库连接和 SqlSession 对象。
  2. 创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象。SqlSession 代表了与数据库的一次会话,它可以执行 SQL 操作并管理数据库连接。通常,每个线程都会创建自己的 SqlSession
  3. 执行 SQL 语句:在 SqlSession 中,通过调用方法执行 SQL 语句。MyBatis 支持多种方式来执行 SQL,包括 selectOne()selectList()insert()update()delete() 等方法。
  4. SQL 语句解析MyBatis 会解析 SQL 语句,包括动态 SQL,参数映射和结果映射。这包括了将 Java 对象转化为 SQL 语句中的参数,以及将查询结果映射回Java对象。
  5. 执行 SQLMyBatisSQL 语句发送到数据库,并执行相应的操作,如查询、插入、更新或删除。数据库返回结果或受影响的行数,这取决于SQL语句的类型。
  6. 处理结果MyBatis 最终会将SQL的执行结果映射为 Java 对象,然后返回给调用者。映射过程通常基于映射文件中的配置。结果集的处理包括将数据库查询结果映射为 Java 对象的属性值。

进一步,上述步骤可总结概括总结为如下的流程。

7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!文章来源地址https://www.toymoban.com/news/detail-750699.html

到了这里,关于7 张图解锁 MyBatis 整体脉络,让你轻松拿捏面试官!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ChatGPT微信开发,轻松拿捏

    在人工智能领域, Ai 已经是一个屡见不鲜的东西了,为什么这次 openAi 推出的 chatGPT 却异常的受人欢迎?其实这还得益于 GPT 模型。 那么什么是 GPT 模型?我们可以看一下 chatGPT 自己的回答: GPT(Generative Pre-trained Transformer) 是一种基于变换器的语言模型,用于自然语言处理

    2024年02月08日
    浏览(37)
  • Apifox:详细使用教程,带你轻松拿捏

    目录 Apifox简介 Apifox的安装与使用 Apifox新建项目的流程 编写接口文档 我们在日常编程开发过程中经常实行的是前后端分离架构的模式,一个项目的落地会通过产品、开发、测试三方会审,对项目需求评审过后,前后端开发会制定一些接口,他们通常会用以下方式: 开发指定

    2024年02月03日
    浏览(62)
  • iPad怎么分屏?学会这个方法,轻松拿捏

    ​很多小伙伴都喜欢使用iPad来学习、娱乐和工作。在使用iPad的时候,有时候需要同时处理两个事情,这种时候,就需要借助分屏功能了。iPad怎么分屏?别着急,学会这个方法,轻松拿捏!   今天小编就具体的来讲一下iPad怎么分屏,还不会使用iPad分屏的小伙伴一起来看看哦

    2024年02月15日
    浏览(35)
  • 【数据结构】带你轻松拿捏顺序表(内附源码)

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,今天正式开始开新坑啦!在接下来的这一个月来我会逐步带大家了解初阶数据结构的知识,如果是你主修的是计算机专业数据结构的重要性不言而喻,哪怕在以后你工作面试时,它也是面试

    2024年02月15日
    浏览(41)
  • 扫描件电子版怎么弄?手机也能轻松拿捏

    在现代社会中,电子版文档变得越来越普及,不仅可以方便地传输和存储,还可以减少纸张的使用。但是,对于一些重要的文件,如证书、合同等,我们可能需要将它们的纸质版扫描为电子版以备份。那么,如何将纸质版的文件扫描为电子版呢?手机是否可以完成这个任务呢

    2024年02月12日
    浏览(32)
  • 一篇文章,轻松拿捏大厂必问的HashMap源码分析

    目录 一,JDK8之后HashMap的新特性 二,hashMap源码属性解读 (一),默认初始化容量数量:16 (二),最大数组容量:2^30 (三),默认负载因子:0.75f (四),触发树化条件1,链表阈值: (五),解树化的阈值:  (六),触发树化条件二,hash桶阈值(数组元素个数): 三

    2023年04月08日
    浏览(75)
  • 轻松拿捏Jenkins(Linux)+Java11+Docker自动化打包部署

    注:本文由笔者小白亲手实践写作,涵盖较全,创作不易,且行且珍惜!! 历时24小时,包含Jenkins环境构建部署过程中的99%问题,确定不来看一下吗? 由于Jenkins自2.357版本之后,上新的版本需要提供Java11及以上版本的支持,且之前的版本市场上推荐的绝大多数插件已经不再

    2024年02月06日
    浏览(41)
  • 【数据结构】图文并茂,通过逻辑图带你轻松拿捏链表,实现各种接口功能

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,我们接着之前讲过的顺序表来继续介绍初阶数据结构的内容,今天给大家带来的是有关链表的基本知识和各种接口功能的实现 好了,废话不多说,开始今天的学习吧! — 概念:链表是一种

    2024年02月14日
    浏览(49)
  • 有哪些AI写作软件?安利这6款,轻松拿捏写作王 #学习#AI写作

    在当今信息爆炸的时代,写作成为了人们表达思想、分享知识和传递情感的重要方式之一。对于很多人来说,写作并非易事。我们会陷入困境,无法找到灵感,我们会苦恼于语言表达的准确性,还有时候我们可能遭遇到了创作瓶颈,随着科技的进步和人工智能技术的发展,

    2024年04月16日
    浏览(45)
  • Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!

    Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中

    2024年01月16日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包