ORM框架Java持久化层使用手册(mybatis,mybatisplus,jpa等)
一、ORM框架(主流选择)
ORM框架是Java持久化的绝对主流,它们将关系型数据库的表记录映射成Java对象,让开发者能够以面向对象的方式操作数据库。
1. JPA(Java Persistence API)
JPA本身是一套标准规范,而不是具体的实现。它定义了如何通过注解或XML来描述对象和关系型数据库的映射关系。主要的实现提供商有Hibernate、EclipseLink等。
- 核心思想:约定优于配置,使用注解(如
@Entity
,@Table
,@Id
)进行映射。 - 优点:
- 标准化:作为Java EE/Jakarta EE标准,代码可移植性强,可以轻松更换底层实现。
- 开发效率高:通过方法名生成查询(Derived Query)、Criteria API等,减少了大量SQL编写。
- 面向对象:完全符合Java开发者的思维模式。
- 常用实现:
- Hibernate:最流行、功能最全的JPA实现。提供了缓存、延迟加载、多种主键生成策略等强大功能。
- EclipseLink:JPA标准的另一个重要实现,源自Oracle,在某些场景下性能有优势。
- Spring Data JPA:它不是JPA的实现,而是基于JPA(默认使用Hibernate)的更高层次的抽象和封装。它极大地简化了DAO层的开发,通过继承
JpaRepository
接口就能获得大部分CRUD方法,是Spring项目中的首选。
2. MyBatis
MyBatis是一个半自动化的持久层框架,它封装了JDBC,但将SQL的控制权完全交给了开发者。
- 核心思想:SQL与Java代码分离,通过XML或注解来配置和映射SQL。
- 优点:
- 灵活性强:对于复杂、高度优化的SQL查询,MyBatis具有绝对优势。开发者可以编写任意复杂的SQL来应对复杂业务场景。
- 学习曲线平缓:对于熟悉SQL的开发者来说非常容易上手。
- 性能可控:由于SQL由开发者编写,可以对其进行精细优化。
- 缺点:
- 工作量较大:需要手动编写所有SQL和结果映射。
- 数据库耦合度高:切换数据库时,可能需要修改特定的SQL语法。
JPA vs. MyBatis 如何选择?
- 选择JPA(Spring Data JPA):如果业务模型相对标准,以CRUD操作为主,追求快速开发和代码的整洁性。
- 选择MyBatis:如果项目涉及大量复杂查询、报表生成,或需要对SQL进行极致优化,或者团队对SQL非常熟悉。
2.1mybatis使用
主要使用在SSM框架中,依赖xml文件中进行sql的编写。每一个操作数据库的sql要和
3. MyBatis-Plus
这是在MyBatis基础上进行的增强工具,在保留MyBatis所有灵活性的前提下,内置了通用Mapper、通用Service、分页插件、代码生成器等强大功能。
- 优点:既拥有了MyBatis的灵活性,又获得了类似JPA的快速CRUD能力,是很多项目的折中优选。
二、响应式持久化框架
随着响应式编程的兴起,为了与WebFlux等响应式Web框架无缝集成,出现了支持响应式流的数据库驱动和框架。
- Spring Data R2DBC:相当于响应式版本的Spring Data JPA,但它不是ORM框架,不提供缓存、延迟加载等高级特性。它基于R2DBC(响应式关系型数据库连接)驱动,提供非阻塞的数据库访问。
- Vert.x Reactive PostgreSQL/MySQL Client:Vert.x框架提供的响应式数据库客户端。
三、纯JDBC
- Java Database Connectivity (JDBC):是Java访问数据库的最底层API。所有上述框架最终都是通过JDBC与数据库交互。
- 使用场景:现在很少直接在新项目中使用,因为代码非常繁琐、重复且容易出错。但在一些性能要求极高或框架无法满足的特殊场景下,仍会直接使用。
总结与选型建议
框架/技术 | 类型 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
Spring Data JPA | ORM(标准封装) | 开发效率极高、标准化、面向对象 | 复杂SQL处理稍弱,黑盒性较强 | 标准CRUD应用、快速开发、微服务 |
Hibernate | ORM(实现) | 功能全面、强大、社区成熟 | 配置复杂、学习曲线较陡 | 复杂对象关系映射、企业级应用 |
MyBatis | 半自动化ORM | SQL灵活可控、性能优化方便 | 需手动编写SQL、工作量大 | 复杂查询、报表系统、遗留数据库 |
MyBatis-Plus | MyBatis增强 | 兼具MyBatis灵活和JPA便捷 | 是MyBatis的扩展,非标准 | 希望平衡灵活性和效率的项目 |
Spring JdbcTemplate | 轻量级工具 | 简单、轻量、避免JDBC繁琐 | 需手动写SQL和映射 | 小型项目、对SQL有简单封装的场景 |
JOOQ | SQL DSL | 类型安全、SQL表达力强 | 商业许可(部分功能) | 喜欢SQL且需要类型安全的项目 |
当前趋势:
- 对于大多数新的Spring Boot项目,Spring Data JPA 是默认的首选,因为它开发效率最高。
- 对于有复杂查询或对SQL有严格性能要求的项目,MyBatis 或 MyBatis-Plus 是更受欢迎的选择。
- 响应式项目则选择 Spring Data R2DBC。