spring-boot-starter-jdbc 、spring-boot-starter-data-jdbc、 spring-boot-starter-data-jpa、mysql-connector-java、mybatis-spring-boot-starter、mybatis-plus-boot-starter、druid-spring-boot-starter 的关系和区别

以下的区别:

  1. mysql-connector-java (mysql-connector-j)
  2. spring-boot-starter-jdbc
  3. spring-boot-starter-data-jdbc
  4. spring-boot-starter-data-jpa
  5. mybatis-spring-boot-starter
  6. mybatis-plus-boot-starter
  7. druid-spring-boot-starter
           ┌──────────────────────────────┐
           │         你的业务代码           │
           └──────────────────────────────┘
                          │
        ┌─────────────────┼─────────────────┐
        │                                   │
   JPA / MyBatis / MyBatis-Plus        Spring JDBC
        │                                   │
        └─────────────── ORM / DAO 层 ───────┘
                          │
                    JDBC 规范 (java.sql)
                          │
                数据库连接池 (Druid/HikariCP)
                          │
                    数据库驱动 (MySQL)
                          │
                        MySQL

mysql-connector-java

数据库驱动

作用:

  • 让 Java 程序能和 MySQL 通信
  • 实现 JDBC 规范

这是最底层的依赖,负责实现 Java 应用程序与 MySQL 数据库之间的通信桥梁(遵循 JDBC 规范)。没有它,任何上层的数据访问技术都无法连接到 MySQL。

当前最新版本是 mysql-connector-j

spring-boot-starter-jdbc(最基础 JDBC 封装)

Spring Boot 对原生 JDBC 的封装和简化。

提供能力:

  • JdbcTemplate
  • 自动配置 DataSource
  • 事务管理(DataSourceTransactionManager)

特点:

  • 自动配置 DataSource(数据源,如 HikariCP,默认连接池)。
  • 提供了 JdbcTemplate 类,消除了传统 JDBC 繁琐的资源管理(try-catch-finally)样板代码。
  • 支持事务管理。

适用场景:

  • 轻量级项目
  • SQL 高度定制
  • 性能极致控制

提供了比纯 JDBC 更高的抽象级别,但仍然需要开发者编写大量的 SQL 语句并处理结果集映射。它只是让 JDBC 用起来更方便,并没有减少 SQL 的编写量。

jdbcTemplate.queryForObject("select * from user where id=?", User.class, 1);

spring-boot-starter-data-jdbc (半 ORM)

比 JDBC 高级一点,但比 JPA 轻量

特点:

  • 提供 Repository 风格
  • 不支持复杂对象关系映射(没有懒加载、级联)
  • 强调 SQL 可控

本质:
“介于 JdbcTemplate 与 JPA 之间”

适用场景:

  • 微服务
  • 强调 SQL 可控
  • 不想引入 Hibernate 复杂机制

spring-boot-starter-data-jpa(完整 ORM)

底层默认实现:

  • Hibernate

能力:

  • 实体映射

自动建表

  • 关联关系(OneToMany / ManyToOne)
  • 懒加载
  • JPQL
  • 事务自动管理

优点:

  • CRUD 极快
  • 领域建模友好

缺点:

  • SQL 不可控
  • 大规模复杂查询性能难调优
  • 调优成本高
  • 容易产生 N+1 查询问题

适用场景:

  • 管理系统
  • 中台系统
  • 复杂对象关系模型

mybatis-spring-boot-starter(SQL优先)

定位:

  • SQL 完全由你掌控的 ORM

特点:

  • XML / 注解写 SQL
  • 映射结果到对象
  • 没有自动建表
  • 非侵入式

适用场景:

  • 复杂查询
  • 报表
  • 对 SQL 控制要求极高的系统

mybatis-plus-boot-starter(MyBatis 增强版)

定位:

  • 在 MyBatis 基础上,提供开箱即用 CRUD

能力增强:

  • BaseMapper
  • 自动分页
  • 自动填充字段
  • 条件构造器
  • 乐观锁
  • 逻辑删除

优点:

  • 兼顾 SQL 控制 + 开发效率
  • 非侵入式(仍然可写原生 SQL)

适用场景(非常适合你当前车联网 SaaS):

  • 设备管理
  • 账号系统
  • 订单系统
  • 运维后台

这是企业级项目中 MyBatis 的事实标准选型

druid-spring-boot-starter(连接池)

定位:

  • 数据库连接池 + SQL监控 + 防火墙

作用:

  • 管理数据库连接复用
  • 监控慢 SQL
  • 防 SQL 注入
  • 提供 Web 控制台

关系:

  • 替代默认 HikariCP
  • 可被 JDBC / JPA / MyBatis 统一使用

适合场景:

  • 运维监控要求高
  • 需要 SQL 可视化
  • 多数据源场景

标准实现:

mysql-connector-j
mybatis-plus-boot-starter
druid-spring-boot-starter
本文为原创内容,作者:闲鹤,原文链接:https://blog.uwenya.cc/1649.html,转载请注明出处。

发表评论