如何配置JooQ生成对应数据库表的Kotlin DTO数据类?
解决jOOQ生成Kotlin DTO(Data Class)的配置方案
核心问题说明
你当前生成的Role.kt其实就是jOOQ默认生成的Kotlin Data Class(POJO),只是命名不符合你想要的RoleDTO格式。要生成指定命名的DTO类,只需调整代码生成的命名策略,并确保POJO生成开关开启即可。
具体Maven配置示例
在jooq-codegen-maven插件中添加以下配置,确保生成命名为XXXDTO的Data Class:
<plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>你的jOOQ版本(需≥3.12)</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <jdbc> <driver>com.mysql.cj.jdbc.Driver</driver> <url>你的MySQL连接URL</url> <user>数据库用户名</user> <password>数据库密码</password> </jdbc> <generator> <name>org.jooq.codegen.KotlinGenerator</name> <database> <name>org.jooq.meta.mysql.MySQLDatabase</name> <inputSchema>itr</inputSchema> </database> <generate> <!-- 明确开启POJO生成(默认已开启,显式配置避免冲突) --> <pojos>true</pojos> <!-- 按需保留/关闭其他类生成,比如Record类 --> <records>true</records> <daos>false</daos> </generate> <target> <packageName>你的目标包名</packageName> <directory>target/generated-sources/jooq</directory> </target> <!-- 配置命名策略:将POJO命名修改为XXXDTO格式 --> <strategy> <name>org.jooq.codegen.DefaultGeneratorStrategy</name> <matchers> <pojo> <expression>(.*)</expression> <replacement>$1DTO</replacement> </pojo> </matchers> </strategy> <kotlinGenerator> <!-- 强制指定生成Data Class(默认值为true,显式配置更稳妥) --> <pojosAsKotlinDataClasses>true</pojosAsKotlinDataClasses> </kotlinGenerator> </generator> </configuration> </plugin>
关键配置解释
- 开启POJO生成:
<generate><pojos>true</pojos>确保jOOQ生成纯数据类,Kotlin环境下默认会生成data class。 - 自定义命名规则:通过
<strategy>下的正则替换,将原表名对应的POJO(如Role)重命名为RoleDTO。 - 强制Data Class生成:
<kotlinGenerator><pojosAsKotlinDataClasses>true</pojosAsKotlinDataClasses>明确指定生成Kotlin Data Class,避免因版本或配置覆盖导致的问题。
验证步骤
- 执行Maven生成命令:
mvn clean jooq-codegen:generate - 查看目标目录,会生成
RoleDTO.kt(Data Class)、RoleRecord.kt等类,符合预期需求。
内容的提问来源于stack exchange,提问作者mikeb
相关产品推荐
相关产品推荐

