如何在 r2dbc 中加入表?

voi*_*ipp 9 project-reactor spring-data-r2dbc r2dbc

在java反应器中,r2dbc。我有两个表 A、B。我也为它们定义了存储库。如何获取由 A 连接 B 组成的数据?

我只提出了以下方法:从 A 调用 databaseClient.select,因此在循环中从 B 调用 select。

但我想要更有效和反应性的方式。怎么做?

mp9*_*1de 14

TL;DR:使用 SQL。

Spring Data是针对 JDBC 的DatabaseClientR2DBC 的改进和反应性变体JdbcTemplate。它封装了各种执行模式、资源管理和异常翻译。其流畅的API select/insert/update/delete 方法适用于简单的扁平化查询。超出提供的 API 的所有内容都受 SQL 使用的影响。

话虽如此,您正在寻找的方法是DatabaseClient.execute(…)

DatabaseClient client = …;
client.execute("SELECT person.age, address.street FROM person INNER JOIN address ON person.address = address.id");
Run Code Online (Sandbox Code Playgroud)

存储库@Query方法完全相同。

在结果处理期间调用数据库是锁定整个结果处理的好方法,因为结果是按流获取的。在尚未获取所有结果的情况下发出查询可能会耗尽 128 或 256 个项目的预取缓冲区并导致结果流卡住。此外,您正在创建 N+1 问题。

  • Spring Data R2DBC 首先不是一个对象关系映射器。您可以将单行映射到单个对象。您可以通过“execute(…).as(PersonalInfo.class).fetch().all()”对所有结果使用基于约定的映射。 (5认同)