我目前正在评估jooq。我很新。我想使用jooq访问SQL Server 2008 R2数据库。当我生成类时,codegen工具会从该服务器上的所有数据库生成对象的代码,这不是我想要的。
我在配置文件中使用哪些设置将工具限制为仅限一个数据库?我检查了documentation并没有那么明显。好吧,对于限制表格,我想我可以使用<includes></includes>
和<excludes></excludes>
。
我是否可以使用相同的标签通过使用包含三个部分[数据库]的完全限定的表名来将工具限制在某些数据库中的对象。[schema]。[table]?
其他一些评论:
如果该工具允许为每个对象类型(即表,视图,过程,函数等)指定包含/排除规则,那将是很好的。
如果可能的话,将表/视图/过程的类放在单独的包中,而不是将它们全部放在一起。
其中一个数据库的架构为<Domain>\<user name>
,生成的代码无效。只需确保在字符串中\
生成\\
。
由于
答案 0 :(得分:2)
我是否可以使用相同的标签通过使用包含三个部分[数据库]的完全限定的表名来将工具限制在某些数据库中的对象。[schema]。[table]?
是的,<includes/>
和<excludes/>
元素都匹配限定名称和非限定名称,因此您可以排除database.schema.table
(省略括号)。
如果该工具允许为每个对象类型(即表,视图,过程,函数等)指定包含/排除规则,那将是很好的。
确实,路线图上有:#5263
如果可能的话,将表/视图/过程的类放在单独的包中,而不是将它们全部放在一起。
您可以使用生成器策略覆盖当前行为:
其中一个数据库有一个模式\并且生成的代码无效。只需确保\在字符串中生成\。
是的,<includes/>
和<excludes/>
元素(代码生成器配置中的许多其他元素)使用具有所有相关语义的Java正则表达式。
在jOOQ 3.9中,您可以在代码生成器中使用catalog / schema mapping feature。有不同的配置方式:
这是最简单的配置,可帮助您入门。它将在单个数据库中生成所有内容:
<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/>
and <excludes/>
regular expressions(适用于所有对象)使用jOOQ 3.8,添加了对多个目录(在SQL Server:数据库中)的代码生成支持,而不添加通过目录映射功能限制它们的支持。当jOOQ 3.9中添加了目录映射(#4794)时,这已得到纠正。
在#4794之前,唯一的解决方法是使用<excludes/>
从不需要的目录中排除所有内容,这导致jOOQ 3.8代码生成器只生成空目录。