这些技术不是同一层的竞争品牌。JDBC 是 Java 数据库访问标准接口,连接池管理连接生命周期,MyBatis 映射手写 SQL,JPA 是 ORM 规范,Hibernate 是常见 JPA 实现,Spring Data 在存储技术之上提供仓库抽象。
Table of contents
Open Table of contents
从底到顶看抽象
业务仓库接口
├─ Spring Data JPA → JPA → Hibernate ┐
├─ MyBatis → SQL 映射 ├→ JDBC → 连接池 → 数据库
└─ 直接 JDBC ┘
ORM 是 Object-Relational Mapping,对象关系映射:把对象状态与关系表记录关联起来。它能减少简单增删改查代码,但对象图与关系查询并不天然等价,仍需理解 SQL、事务和索引。
如何选择
| 场景 | 合理起点 |
|---|---|
| SQL 很少、要求完全控制 | JDBC 或轻量 JDBC 模板 |
| 复杂查询多、团队擅长 SQL | MyBatis |
| 聚合模型清晰、常规 CRUD 多 | JPA/Hibernate |
| 希望统一仓库接口和分页规范 | 对应存储的 Spring Data 模块 |
项目可以在模块边界内混用,例如核心写模型用 JPA、复杂报表用 MyBatis,但同一事务、连接和实体状态边界必须清晰。
性能陷阱不会被抽象消除
MyBatis 常见 N+1 来自嵌套查询;Hibernate 常见 N+1 来自懒加载对象图。二者都要用 SQL 数量测试和生产观测治理。连接池耗尽、超长事务、无索引查询和返回过多列也与框架无关。
JPA 的持久化上下文会跟踪实体变化,批量处理时需分批 flush 与 clear;MyBatis SqlSession 有一级缓存,也不能无限保存。不要把任一会话跨线程或跨请求共享。
选型验证应实现同一垂直切片:条件查询、分页、批量写、并发更新、事务回滚、迁移和指标。比较生成 SQL、调试难度、团队能力与退出成本,而不是比较 Hello World 行数。
下一步
继续阅读06-19 数据存储选型,从访问模式出发选择关系库、文档库、分析库与对象存储。