R2DBC 对比 Spring Jdbc 对比 Spring 数据 JDBC?

R2DBC vs Spring Jdbc Vs Spring Data JDBC?

On Using Spring JDBC 在使用批处理时效果很好并且比 JPA 有一些改进。

我很想知道为什么要使用 Spring 数据 JDBC 而你已经有 Spring JDBC.

我很想知道为什么在您已经 Spring JDBC 时使用 R2DBC

当您使用 R2DBC 时很容易,就是在构建非阻塞应用程序时。堆栈中的所有内容都必须是非阻塞的,包括数据库驱动程序。 JDBC 本质上是阻塞的,人们尝试使用各种方案来绕过它,但效果并不好。如果您不构建非阻塞应用程序,则不会使用 R2DBC。

关于何时使用 spring 数据 JDBC 的部分,看起来它为您提供了一种更简单的方法来创建存储库和地图数据,只要您同意他们的固执己见框架,您可以接受没有使用 JPA 获得的所有复杂映射,并且您需要 DDD 概念(如聚合根)。否则 Spring JDBC 需要更多代码来创建您的数据访问对象,但可能会提供更多控制。 https://docs.spring.io/spring-data/jdbc/docs/2.2.4/reference/html/#reference 详细说明了为什么要使用 Spring 数据 JDBC。简单与控制。

这三种技术在不同的抽象级别上工作。

R2DBCJDBC 的替代方法。它是反应性的,即非阻塞的。您向服务器发送一条语句,继续工作并最终将结果作为事件接收。它通常用于更好地扩展的能力。但是使用它更复杂,因为它是异步的,基本上您的完整应用程序也应该是异步的才能获得好处。与 JDBC 一样,您可能不想单独使用它。

Spring JDBC 比得上 Spring R2DBC 都隐藏了一些底层技术的繁琐细节。它们都提供了对底层技术的几乎完全访问,并为您提供了更愉快的开发体验。

Spring Data JDBC 是一个基于 Repository 抽象的对象关系映射器 (ORM)。对于反应世界,还有 Spring Data R2DBC 与 Spring Data JDBC 共享代码和属性。它基本上是 Spring Data JPA 的替代品。要比较 Spring Data JDBC 和 Spring Data JPA,请参阅 。 Spring 数据的存储库抽象来自领域驱动设计。您可以将存储库视为由某种持久性机制支持的集合。该集合的元素不仅是实体,而且是聚合体,它们属于一起并且单独没有意义。一个典型的例子是带有行项目的采购订单。没有采购订单的行项目没有多大意义。

这种方法对域模型的设计施加了一些限制。在 return 中,您将获得一个非常干净的域模型结构。 Spring Data JDBC 和 Spring Data R2DBC 都允许将它们与 Spring JDBC 和 Spring R2DBC 自由组合。这对于 JPA 和基于它构建的所有内容都非常不同,因为 JPA 有一个缓存作为系统的组成部分,当您混合使用 JPA 和直接 JDBC 时,这将导致 有趣的 效果在单个事务中访问。

有关所讨论的不同技术的概述,请参阅以下内容table。

Stack JDBC to Spring Data JDBC R2DBC to Spring Data R2DBC JDBC to Spring Data JPA
Underlying API JDBC R2DBC JDBC
Usability Layer Spring JDBC Spring R2DBC Spring ORM (*)
ORM Spring Data JDBC Spring Data R2DBC JPA
Repository Abstraction Spring Data JDBC Spring Data R2DBC Spring Data JPA
Communication Style synchronous reactive synchronous

(*) Spring ORM 位于 JPA 或其他 Spring 独立的 ORM 技术之上,因此在这个 table 中它应该低于 JPA。