R2DBC、Spring Jdbc、Spring Data JDBC?

Jef*_*ook 7 spring spring-jdbc spring-data-jdbc r2dbc

关于使用 Spring JDBC,它工作得非常好,并且在使用批处理时比 JPA 有一些改进。

我很想了解当您已经拥有Spring Data JDBC 时为什么要使用 Spring Data JDBC

我很想了解当您已经拥有Spring JDBC时为什么要使用R2DBC

Jen*_*der 12

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

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

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

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

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

请参阅下表,了解所讨论的不同技术的概述。

JDBC 到 Spring Data JDBC R2DBC 到 Spring Data R2DBC JDBC 到 Spring Data JPA
底层API 数据库连接 R2DBC 数据库连接
可用性层 春季 JDBC 春季 R2DBC Spring ORM (*)
ORM Spring数据JDBC Spring Data R2DBC 日本PA
存储库抽象 Spring数据JDBC Spring Data R2DBC Spring数据JPA
沟通方式 同步 反应性的 同步

(*) Spring ORM 位于 JPA 或其他 Spring 独立 ORM 技术之上,因此在此表中它应该位于 JPA 之下。


Nat*_*hes 2

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

\n

对于何时使用 Spring Data JDBC 的部分,看起来它为您提供了一种更简单的方法来创建存储库和映射数据,只要您\xe2\x80\x99 同意他们固执己见的框架,你就可以不拥有所有使用 JPA 获得的复杂映射,并且您需要 DDD 概念(如聚合根)。否则,Spring JDBC 需要更多代码来创建数据访问对象,但可能会提供更多控制。https://docs.spring.io/spring-data/jdbc/docs/2.2.4/reference/html/#reference描述了有关为何使用 Spring Data JDBC 的更多信息。这是简单与控制。

\n