当前位置: 首页 > article >正文

【MySQL进阶之路】SpringBoot 底层如何去和 MySQL 交互了呢?

在这里插入图片描述

SpringBoot 底层如何去和 MySQL 交互了呢?

我们在写做 Java 项目时,一般都是引入 MyBatis 框架来和 MySQL 数据库交互,如果需要在 MySQL 上执行什么语句,只需要在 Mapper.xml 文件中定义对应的 SQL 语句即可

那么他底层到底是如何将定义在 Mapper.xml 文件中的 SQL 语句拿到 MySQL 中执行的呢?

其实 SpringBoot 项目底层就是通过和 MySQL 建立网络连接,之后通过这个连接来进行通信的

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

那么要建立和 MySQL 之间的连接,就要在项目中引入 MySQL 连接的 JDBC(Java Database Connectivity) 驱动,JDBC 就提供了 Java 程序和 MySQL 进行交互的接口

我们在 Java Web 刚入门的时候应该就学习了 JDBC,而在 MyBatis 中也是对 JDBC 进行了封装和抽象,提供了更丰富的功能给我们使用,先来看一下下边这张图,来详细说一下 SpringBoot 与 MySQL 如何进行交互:

请添加图片描述

用户发起一次 HTTP 请求的流程:

先从用户端说起,当用户对 SpringBoot 系统发起一个 HTTP 请求时,Tomcat 会创建一个线程来处理用户的请求,这个线程通过 JDBC 驱动来和数据库建立网络连接,将需要执行的 SQL 语句发送给 MySQL 数据库,MySQL 收到 SQL 之后执行语句,并将结果通过网络连接返回给 Tomcat 中的线程,最终再经过业务逻辑的处理,返回给用户

JDBC 驱动会为每一个线程都创建一个数据库连接吗?

上边说到了工作线程要和 MySQL 进行通信,就要建立一个数据库连接

那么假想一下如果对每一个线程都建立一个数据库连接,这里建立的连接是 TCP 连接,光建立连接就需要 3 次握手(3 次网络 IO),并且在使用完进行销毁,那么带来的性能开销是相当庞大的

基于这个问题,就引入了 数据库连接池,像我们常用的连接池就是 Druid 数据库连接池(阿里巴巴开源)

通过连接池,可以集中管理一批数据库连接,来供多个线程使用,使用完不销毁,再放回连接池可以进行复用,这样就省去了不断创建连接以及销毁连接的性能开销

在 Druid 连接池中维护了多个与 MySQL 的数据库连接,因此在 MySQL 中也是会有对应的连接池用于管理和外部的连接的,这里就省略不画了,只画了 Druid 中的连接池:

请添加图片描述


http://www.kler.cn/a/232732.html

相关文章:

  • 服务器显卡和桌面pc显卡有什么不同
  • linux c/c++最高效的计时方法
  • Vue 的生命周期函数 和 Vuex
  • 【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!
  • MoneyPrinterTurbo – 开源的AI短视频生成工具
  • MySQL重难点(一)索引
  • 浏览器提示ERR_SSL_KEY_USAGE_INCOMPATIBLE解决
  • Node.js JSON Schema Ajv依赖库逐步介绍验证类型和中文错误提示
  • elementui上传文件不允许重名
  • Java中 使用Lambda表达式实现模式匹配和类型检查
  • 云服务器也能挂游戏 安卓模拟器
  • 树莓派-Ubuntu22.04
  • 【Unity游戏设计】跳一跳Day1
  • 深度学习预备知识1——数据操作
  • 设置了.gitignore文件,但某些需要被忽略的文件仍然显示
  • Git介绍和常用命令说明
  • 微软.NET6开发的C#特性——委托和事件
  • SpringMVC-组件解析
  • vscode 括号 python函数括号补全
  • 【Flink】FlinkSQL的DataGen连接器(测试利器)
  • arkTS开发鸿蒙OS应用(登录页面实现,连接数据库)
  • 158基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序
  • flink反压及解决思路和实操
  • (十八)springboot实战——spring securtity注解方式的授权流程源码解析
  • 如何连接ChatGPT?无需科学上网,使用官方GPT教程
  • AT_abl_d 题解