【问题标题】:Jooq generating different filenames for different databasesJooq 为不同的数据库生成不同的文件名
【发布时间】:2020-09-01 16:16:22
【问题描述】:

因此,我目前在学习环境中使用 jooq,并希望能够在其他数据库中轻松放入一些东西。最初有一个 sqlite 数据库,并使用以下 pom 配置迁移到 mariadb,maven 唯一的区别是 db url 和 Driver 和 meta

            <plugin>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-codegen-maven</artifactId>
                <version>3.13.1</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jdbc>
                        <driver>org.mariadb.jdbc.Driver</driver>
                        <!--suppress UnresolvedMavenProperty -->
                        <url>${db.url}</url>
                    </jdbc>
                    <generator>
                        <database>
                            <name>org.jooq.meta.mariadb.MariaDBDatabase</name>
                            <includes>.*</includes>
                        </database>
                        <target>
                            <packageName>org.learn_java.db.autogen</packageName>
                        </target>
                    </generator>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-codegen-maven</artifactId>
                <version>3.13.1</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jdbc>
                        <driver>com.mysql.cj.jdbc.Driver</driver>
                        <!--suppress UnresolvedMavenProperty -->
                        <url>${db.url}</url>
                    </jdbc>
                    <generator>
                        <database>
                            <name>org.jooq.meta.sqlite</name>
                            <includes>.*</includes>
                        </database>
                        <target>
                            <packageName>org.learn_java.db.autogen</packageName>
                        </target>
                    </generator>
                </configuration>
            </plugin>

在 flyway 中使用非常简单的模式

CREATE TABLE IF NOT EXISTS INFO
(
   TAG_NAME varchar(30) PRIMARY KEY,
   MESSAGE varchar(2000) NOT NULL
);

它在不同的地方生成信息表

.tables.INFO // for sqlite
.tables.Info.INFO // for mariadb

有没有一种方法可以标准化生成 Table 类的位置?

【问题讨论】:

    标签: java maven jooq


    【解决方案1】:

    在 SQLite 中,没有模式,即只有默认模式。在其他数据库产品中,存在模式(甚至是目录,在 SQL Server 的情况下)的概念,它在数据库和 jOOQ 生成的代码中充当数据库对象的命名空间。

    您没有为代码生成指定要包含的架构,因此 jOOQ 为所有可用架构(SQLite 中只有一个,MariaDB 中只有几个)生成代码,为每个架构生成一个额外的子包。为防止这种情况,请使用&lt;inputSchema&gt;:

    <database>
        <name>org.jooq.meta.mariadb.MariaDBDatabase</name>
        <!-- This is case sensitive. Use the actual case from your database -->
        <inputSchema>Info</inputSchema>
        <includes>.*</includes>
    </database>
    

    See also the section of the manual about schema mapping。或者,您可以use a generator strategy to override the default package name of generated objects

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 2012-02-13
      • 2014-11-24
      • 2019-11-27
      • 2014-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多