以下的区别:
- mysql-connector-java (mysql-connector-j)
- spring-boot-starter-jdbc
- spring-boot-starter-data-jdbc
- spring-boot-starter-data-jpa
- mybatis-spring-boot-starter
- mybatis-plus-boot-starter
- 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,转载请注明出处。