使用来自两个不同数据库的两个表使用 JOOQ 构建左连接查询
Build Left Join Query with JOOQ using two Tables from two Different Databases
我们正在使用 JOOQ 执行所有查询。
现在我们需要使用 JOOQ 创建左连接查询,什么将左连接来自两个不同数据库的两个表
示例本机 SQL 查询(如下),我们需要使用 JOOQ 框架构建此查询而不是使用本机 sql。直到现在我都没有找到任何解决方案,可能是 JOOQ
不支持此功能
SELECT *
FROM `library`.`books`
LEFT JOIN `library2`.`author2` ON `library`.`books`.`author_id` = `library2`.`author2`.`id`
代码生成器配置
如果您想使用两个不同的数据库/模式,您需要相应地配置代码生成器。您可以指定多个输入模式 as documented here:
<configuration>
<generator>
<database>
<schemata>
<schema>
<inputSchema>library</inputSchema>
</schema>
<schema>
<inputSchema>library2</inputSchema>
</schema>
</schemata>
</database>
</generator>
</configuration>
备选方案:
- 您可以不使用
<inputSchema/>
配置,jOOQ 的代码生成器将简单地生成所有可用的模式。
- 您可以配置多个独立的代码生成,每个模式一个。这意味着您的模式没有相互共享的链接元数据(例如外键)。
查询
jOOQ manual recommends referencing tables from a global generated Tables
class。这适用于单一模式设置。当查询多个模式时,可能值得从生成的模式实例中引用表。以下是编写查询的方法:
import static com.example.generated.library .Library .LIBRARY ;
import static com.example.generated.library2.Library2.LIBRARY2;
// ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
// | | |
// Package per schema -----------------+ | |
// Schema class --------------------------+ |
// Schema instance -----------------------------------+
然后:
DSL.using(configuration)
.select()
.from(LIBRARY.BOOKS)
.leftJoin(LIBRARY2.AUTHOR2)
.on(LIBRARY.BOOKS.AUTHOR_ID.eq(LIBRARY2.AUTHOR2.ID))
.fetch();
我们正在使用 JOOQ 执行所有查询。
现在我们需要使用 JOOQ 创建左连接查询,什么将左连接来自两个不同数据库的两个表
示例本机 SQL 查询(如下),我们需要使用 JOOQ 框架构建此查询而不是使用本机 sql。直到现在我都没有找到任何解决方案,可能是 JOOQ
不支持此功能SELECT *
FROM `library`.`books`
LEFT JOIN `library2`.`author2` ON `library`.`books`.`author_id` = `library2`.`author2`.`id`
代码生成器配置
如果您想使用两个不同的数据库/模式,您需要相应地配置代码生成器。您可以指定多个输入模式 as documented here:
<configuration>
<generator>
<database>
<schemata>
<schema>
<inputSchema>library</inputSchema>
</schema>
<schema>
<inputSchema>library2</inputSchema>
</schema>
</schemata>
</database>
</generator>
</configuration>
备选方案:
- 您可以不使用
<inputSchema/>
配置,jOOQ 的代码生成器将简单地生成所有可用的模式。 - 您可以配置多个独立的代码生成,每个模式一个。这意味着您的模式没有相互共享的链接元数据(例如外键)。
查询
jOOQ manual recommends referencing tables from a global generated Tables
class。这适用于单一模式设置。当查询多个模式时,可能值得从生成的模式实例中引用表。以下是编写查询的方法:
import static com.example.generated.library .Library .LIBRARY ;
import static com.example.generated.library2.Library2.LIBRARY2;
// ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
// | | |
// Package per schema -----------------+ | |
// Schema class --------------------------+ |
// Schema instance -----------------------------------+
然后:
DSL.using(configuration)
.select()
.from(LIBRARY.BOOKS)
.leftJoin(LIBRARY2.AUTHOR2)
.on(LIBRARY.BOOKS.AUTHOR_ID.eq(LIBRARY2.AUTHOR2.ID))
.fetch();