您当前的问题/意见的答案:
我可以使用相同的标签通过使用具有三个部分 [database].[schema].[table] 的完全限定表名来将工具限制为仅在某些数据库中的对象吗?
是的,<includes/>
and<excludes/>
元素匹配限定名称和非限定名称,因此您可以例如排除database.schema.table
(省略括号)。
如果该工具允许为每个对象类型(即表、视图、过程、函数等)指定包含/排除规则,那就太好了。
确实,这在路线图上:#5263
如果可能,将表/视图/过程的类放在单独的包中,而不是将它们放在一起。
您可以使用生成器策略覆盖当前行为:
其中一个数据库具有架构 \ 并且生成的代码无效。只需确保在字符串中生成 \ 即可。
是的,<includes/>
and<excludes/>
元素(与代码生成器配置中的许多其他元素一样)采用具有所有相关语义的 Java 正则表达式。
更好地解决您的实际问题:
在 jOOQ 3.9 中,您可以在代码生成器中使用目录/模式映射功能。有多种配置方法:
只有一个输入目录(SQL Server 调用数据库的标准名称)
这是帮助您入门的最简单配置。它将在单个数据库中生成所有内容:
<configuration>
<generator>
<database>
<inputCatalog>database</inputCatalog>
...
您可以进一步将生成的输出减少到该数据库中的单个模式,如下所示:
<configuration>
<generator>
<database>
<inputCatalog>database</inputCatalog>
<inputSchema>schema</inputSchema>
...
多个输入目录
在更复杂的设置中(或随着项目的增长),更合适的方法是明确列出所有目录和模式:
<configuration>
<generator>
<database>
<catalogs>
<!-- This configuration generates everything inside of that catalog -->
<catalog>
<inputCatalog>database1</inputCatalog>
</catalog>
<!-- This configuration generates only some schemas inside of the catalog -->
<catalog>
<inputCatalog>database2</inputCatalog>
<schemata>
<schema>
<inputSchema>schema1</inputSchema>
</schema>
<schema>
<inputSchema>schema2</inputSchema>
</schema>
</schemata>
</catalog>
...
背景:
默认情况下,jOOQ 代码生成器总是生成它可以看到的所有内容。有两种方法可以明确限制这一点:
- 代码生成器的目录/模式映射功能
- 标准
<includes/>
和<excludes/>
正则表达式(适用于所有对象)
在 jOOQ 3.8 中,添加了对多个目录(在 SQL Server:数据库中)的代码生成支持,而没有添加通过目录映射功能限制它们的支持。这在 jOOQ 3.9 中得到纠正,添加了目录映射 ( #4794 )。
在#4794之前,唯一的解决方法是使用<excludes/>
从不需要的目录中排除所有内容,这导致 jOOQ 3.8 代码生成器仅生成空目录。
另请参阅关于 jOOQ 用户组的讨论