了解数据库连接池

一、什么是数据库连接池?

1. 本质

数据库连接池是管理数据库连接的 “缓冲池”,提前创建一定数量的数据库连接(Connection),程序需要操作数据库时直接从池里 “拿”,用完后 “还回池里”,避免重复创建和关闭连接。

2. 为什么需要它?
  • 解决 “连接创建耗时” 问题:创建数据库连接需要验证账号、协商协议等步骤(类似去银行办业务先排队取号),频繁创建 / 关闭会严重拖慢性能。
  • 控制资源占用:限制最大连接数(比如最多 20 个),防止大量并发请求创建过多连接,导致数据库崩溃(类似银行不会无限开柜台)。
  • 提高稳定性:自动检测并替换失效连接(比如网络中断的连接),避免程序报错。
3. 常见实现
  • 德鲁伊(Druid):阿里开源,带监控、防 SQL 注入等功能,国内常用。
  • HikariCP:Spring Boot 默认,轻量高效,性能极佳。

二、MyBatis 与数据库连接池的关系?

1. 两者职责完全不同
  • MyBatis:是 “SQL 映射工具”,负责把 Java 代码里的方法(比如getUserById(1))翻译成 SQL 语句(select * from user where id=1),并把数据库返回的结果转换成 Java 对象。** 它不负责创建或管理数据库连接 **。
  • 数据库连接池:是 “连接管家”,负责创建、复用、回收数据库连接。** MyBatis 必须依赖连接池才能拿到连接执行 SQL**。
2. 协作流程(核心)
MyBatis执行SQL的步骤:  
① 从连接池“借”一个现成的数据库连接(Connection);  
② 用这个连接执行翻译好的SQL;  
③ 执行完成后,把连接“还”回连接池(不是关闭);  
④ 连接池把连接保存起来,等待下次被MyBatis或其他工具使用。  

3. 依赖关系

没有连接池,MyBatis 每次执行 SQL 都要手动创建连接(像每次用车都买新车,用完就扔),效率极低;有了连接池,MyBatis 可以高效复用连接,性能提升 10 倍以上。

三、为什么没见过 MyBatis 的配置文件?

核心原因:Spring Boot 的 “自动配置” 帮你省了步骤

在 Spring Boot 项目中,只要你引入了 mybatis-spring-boot-starter 和 Druid 依赖,Spring Boot 会自动完成以下工作:

  1. 读取 application.yml 中的数据库配置(URL、账号、密码)和 Druid 连接池参数;
  2. 创建 Druid 连接池实例(DataSource 对象);
  3. 自动把这个连接池 “传给” MyBatis,让 MyBatis 用它来获取数据库连接。


整个过程不需要你写 MyBatis 核心配置文件(mybatis-config.xml),也不需要手动关联连接池,这就是 Spring Boot 的 “零配置” 优势。

具体流程:为什么不重复?

咱们用代码和配置文件演示,你会发现所有配置都集中在 application.yml 里,完全不重复:

1. 引入依赖(关键)
<!-- MyBatis 的 Spring Boot  Starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.0</version>
</dependency>

<!-- Druid 的 Spring Boot Starter -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

<!-- MySQL 驱动 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

2. 配置文件(application.yml):所有参数集中在这里
spring:
  datasource:
    # 1. 数据库基础信息(连接池和 MyBatis 共用这部分)
    url: jdbc:mysql://localhost:3306/bookstore?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

    # 2. Druid 连接池参数(只配一次)
    druid:
      max-active: 20
      min-idle: 5
      max-wait: 60000
      # ... 其他 Druid 配置(如监控)

# 3. MyBatis 配置(只配 MyBatis 自身的参数,和连接池无关)
mybatis:
  mapper-locations: classpath:mapper/*.xml  # 指定 Mapper XML 路径
  type-aliases-package: com.example.entity  # 实体类别名包
  configuration:
    map-underscore-to-camel-case: true  # 下划线转驼峰(如数据库字段 book_name → 实体类 bookName)

3. Spring Boot 自动做了什么?
  • ** Druid 自动配置 druid-spring-boot-starter 会根据 spring.datasource.druid 配置,创建一个 DruidDataSource 实例(连接池),交给 Spring 容器管理。
    -
    MyBatis 自动配置 **:mybatis-spring-boot-starter 会从 Spring 容器中找到上面的 DruidDataSource,自动把它设置为 MyBatis 的数据源(即 MyBatis 用这个连接池获取连接)。


整个过程中,** 数据库连接信息(URL、账号密码)只在 spring.datasource 下配置一次 **,连接池和 MyBatis 共享这部分信息,完全不会重复。

为什么搁这里没配置过 MyBatis 核心文件?

传统 SSM 项目中,需要手动写 mybatis-config.xml 并配置数据源,但 Spring Boot 通过以下方式简化了:
1.** 自动读取配置 :MyBatis 的参数(如 mapper-locations)直接在 application.ymlmybatis 节点下配置,替代了 XML。
2.
自动关联连接池 **:Spring Boot 会自动把容器中的 DataSource(这里是 Druid)传给 MyBatis,不用在 XML 中写 <dataSource> 标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值