jOOQ Codegen с различными базами данных MySQL для dev, test и prod - PullRequest
0 голосов
/ 20 февраля 2019

Я использую 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?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете отобразить вашу схему либо во время генерации кода, либо во время выполнения.Оба варианта включают полное отсутствие отображения имени схемы в сгенерированном 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();

Подробнее здесь

...