跳到主要内容

3. 操作数据库

第 2 章里,我们创建了第一个应用,并实现基本的控制器、服务,了解了依赖注入的基本使用知识,并深入学习了控制器各种使用细节。本章我们将学习数据库相关的操作,包括数据库的配置连接,几种 ORM 框架的使用等。

ORM 框架

Micronaut 框架中,主要支持的 ORM 框架为 R2DBC、Hibernate-JPA 和 MyBatis,我们先概述一下三种框架的特点和差异,然后会结合代码详细的介绍各个框架的使用。

R2DBC

响应式关系数据库连接(R2DBC)项目为关系数据库带来了响应式编程应用程序接口。

它有以下特点:

  • 基于 Reactive Streams 规范。R2DBC 以 Reactive Streams 规范为基础,提供了一个完全响应式的非阻塞 API。
  • 与关系数据库协同工作与 JDBC 的阻塞特性不同,R2DBC 允许使用反应式 API 与 SQL 数据库协同工作。
  • 支持可扩展的解决方案。借助响应流,R2DBC 可让你从传统的 "每个连接一个线程 "模式转变为功能更强大、可扩展的方法。
  • 提供开放式规范。R2DBC 是一种开放式规范,它建立了服务提供商接口 (SPI),供驱动程序供应商实施和客户端使用。

响应式编程用于异步数据流和事件的处理,它类似于 Java 本身的 CompletableFuture,它有一个 Reactive Streams 规范,同时设计解决背压问题,这使得响应式编程在众多应用场景中使用。而 R2DBC 就基于这套规范设计实现了响应式访问关系型数据库的框架。

Hibernate-JPA

JPA(Java Persistence API)是 Java 的持久化 API,用于将 Java 对象持久化到数据库,但它本身仅提供了一套规范,具体要看实现框架。

Hibernate-JPA 就是使用 Hibernate 实现了 JPA 的 API,它也是目前最流行的 JPA 实现之一,提供了丰富的功能和高效的性能。

它有以下特点:

  • 对象持久化:通过实体类与数据库表的映射关系,将 Java 对象存储 到数据库中,并能自动处理对象之间的关联关系。
  • 事务管理:支持 ACID(原子性、一致性、隔离性和持久性),确保数据在持久化过程中的完整性和一致性。
  • 缓存管理:提供了一级缓存和二级缓存支持,可以提升读取性能。
  • 多数据库支持:支持多个数据库的访问,可轻松切换数据库的类型和提供者。

MyBatis

MyBatis 是一款持久层框架,它支持自定义 SQL、存储过程以及高级映射。目前有很多人和很多项目都使用了 MyBatis。

它有以下特点:

  • 简单易用:基于 XML 和注解,开发者只需要编写简单的 SQL 语言。还提供了丰富的 API 和扩展点。
  • 灵活性高:采用灵活的映射机制,开发者可依据需求选择将查询结果映射为 Java 对象,也可以将 Java 对象映射为数据库表。
  • 性能优越:底层采用原生 SQL,能够充分利用数据库的功能和优化策略,达到较高性能。此外还提供缓存机制,提高访问效率。
  • 可扩展性强:提供了很多扩展点和插件机制,可以根据业务需要自定义扩展。
  • 无缝集成:与其他框架可以很好集成,可利用现在容器和事务管理机制,简化整合过程。

小结

在目前的 Java 项目开发中,以上三种 ORM 框架中,MyBatis 一定是使用人最多的,而 JPA 具有 Java 官方的规范加持,有一种很正式很规范的味道,R2DBC 则乘着 Reactive Streams 的风,在未来一定会大展宏图。

而实际上,像 R2DBC 也并不会被孤立使用,像在 Micronaut 框架中,数据操作层面实际是使用 JPA 封装的,实际交互则是由实现 R2DBC 的框架实现,这就不仅占据了 JPA 的规范化优点,还占据了 R2DBC 的异步优点。

下面,我们将结合实例,分别介绍三种框架的应用实战,我们先介绍 MyBatis 的使用,然后介绍 Hibernate-JPA 的使用,并扩展 JPA 相关 API 的知识,最后我们介绍 R2DBC,结合 Micronaut 框架本身实现响应式开发。