Jooq 为不同的数据库生成不同的文件名
Jooq generating different filenames for different databases
所以我目前在学习环境中使用 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
);
它在不同的地方生成信息table
.tables.INFO // for sqlite
.tables.Info.INFO // for mariadb
有没有办法标准化生成 Table 类 的位置?
在 SQLite 中,没有模式,即只有默认模式。在其他数据库产品中,有模式的概念(在 SQL Server 的情况下甚至是目录),它在数据库和 jOOQ 生成的代码中充当数据库对象的命名空间。
您没有指定代码生成要包含的模式,因此 jOOQ 为所有可用模式生成代码(SQLite 中只有一个,MariaDB 中有几个),为每个模式生成一个额外的子包。为防止这种情况,请使用 <inputSchema>
:
<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. Alternatively, you could use a generator strategy to override the default package name of generated objects.
所以我目前在学习环境中使用 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
);
它在不同的地方生成信息table
.tables.INFO // for sqlite
.tables.Info.INFO // for mariadb
有没有办法标准化生成 Table 类 的位置?
在 SQLite 中,没有模式,即只有默认模式。在其他数据库产品中,有模式的概念(在 SQL Server 的情况下甚至是目录),它在数据库和 jOOQ 生成的代码中充当数据库对象的命名空间。
您没有指定代码生成要包含的模式,因此 jOOQ 为所有可用模式生成代码(SQLite 中只有一个,MariaDB 中有几个),为每个模式生成一个额外的子包。为防止这种情况,请使用 <inputSchema>
:
<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. Alternatively, you could use a generator strategy to override the default package name of generated objects.