在java反应器中,r2dbc。我有两个表 A、B。我还为它们定义了存储库。
如何获取A连接B组成的数据?
我只提出以下方法:
从 A 调用databaseClient.select,然后在循环中从 B 调用 select。
但我想要更有效和反应性的方式。怎么做?
TL;DR:使用 SQL。
春季数据DatabaseClient
是 R2DBC 的改进和反应变体JdbcTemplate
用于 JDBC。它封装了各种执行模式、资源管理和异常翻译。其流畅的 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");
存储库也是如此@Query
方法。
在结果处理期间调用数据库是锁定整个结果处理的好方法,因为结果是按流方式获取的。在尚未获取所有结果的情况下发出查询可能会耗尽 128 或 256 个项目的预取缓冲区,并导致结果流卡住。此外,您正在创建一个 N+1 问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)