我正在使用jOOQ和MySQL,每个阶段有不同的数据库(dev,test,prod)。
pom.xml中的配置如下所示。
<generator>
<database>
<name>org.jooq.meta.mysql.MySQLDatabase</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>db_test</inputSchema>
</database>
<target>
<packageName>ch.bls.nfdb.db</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
</generator>
jOOQ使用inputSchema并生成类DbTest。
所有SQL语句都以此架构名称为前缀。这就是问题所在。如何为prod数据库db_prod配置模式名称?
您可以在代码生成时或运行时映射架构。这两个选项都包括根本不在生成的SQL中呈现模式名称:
<database>
<name>org.jooq.meta.mysql.MySQLDatabase</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>db_test</inputSchema>
<!-- Add this: -->
<outputSchemaToDefault>true</outputSchemaToDefault>
<!-- Or this: -->
<outputSchema>db_prod</outputSchema>
</database>
Settings settings;
// Add this
settings = new Settings().withRenderSchema(false);
// Or this
settings = new Settings().withRenderMapping(
new RenderMapping().withSchemata(
new MappedSchema().withInput("db_dev").withOutput("db_prod")));
DSLContext ctx = DSL.using(connection, MYSQL, settings);
ctx.select().from(...).fetch();