配置用于 Gradle6.x + MySQL 8 的 jOOQ 3.14 代码自动生成 (已更新)

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

文章介绍在 Gradle 6.x 与 MySQL 8 环境下配置 jOOQ 3.14 代码自动生成,以解决旧教程不兼容新版 Gradle 和 Java 11 的问题。jOOQ 根据数据库表生成数据访问代码,兼顾 Hibernate 抽象过度与 JDBC 繁琐之间的平衡。配置时需在 build.gradle 中添加 jOOQ 及数据库驱动依赖,用 Groovy MarkupBuilder 编写生成配置,指定 JDBC 连接、包含表、目标包名与目录,再调用 GenerationTool.generate 执行生成。

🔎

延伸解读

版本兼容性是配置关键

文章强调旧教程基于Gradle旧版和SQLite,在新版Gradle和Java 11下已失效。jOOQ 3.14的配置需注意Gradle 6.x的语法变化,以及MySQL 8的驱动兼容性。读者应优先确认Gradle、Java、jOOQ三者的版本匹配,避免直接套用过时示例导致构建失败。

依赖声明需区分场景

配置中需在dependencies和buildscript两个块分别添加jOOQ依赖及数据库驱动。前者供项目编译运行使用,后者供代码生成任务使用。文章特别提醒必须添加数据库驱动,否则生成时会报错且原因不明。这一细节是许多初次配置者容易遗漏的坑点。

生成配置用Groovy动态构建

文章采用Groovy的MarkupBuilder以编程方式生成jOOQ的XML配置,而非手写静态文件。这种方式便于在build.gradle中动态指定JDBC连接、包含表、目标包名和输出目录。最后调用GenerationTool.generate执行生成。读者可据此灵活调整表过滤和输出路径,适应不同项目结构。

❓

Q&A

为什么需要写这篇关于 Gradle 6.x + MySQL 8 下 jOOQ 3.14 代码自动生成的文章?

因为之前介绍在旧版 Gradle、SQLite 上配置 jOOQ 的文章太旧,在新版 Gradle 上无法使用,也不兼容 Java 11。网络上大部分文档要么使用 Maven,要么针对早期版本的 jOOQ(不向后兼容),而 jOOQ 官方文档又不全面,导致初学者踩坑。

jOOQ 是什么?它主要解决什么问题?

jOOQ 全称 Java Object Oriented Querying,即面向 Java 对象查询,是 Data Geekery 公司研发的 DA 方案。它主要解决两个问题:Hibernate 的抽象使得我们离 SQL 太远,对 SQL 掌控力度弱;JDBC 过于嘈杂,需要干的事情太多。jOOQ 希望在上述两者中寻找一个最佳的平衡。

在 build.gradle 中配置 jOOQ 代码生成时,需要添加哪些依赖?

需要添加 jOOQ 依赖(如 compile group: 'org.jooq', name: 'jooq', version: '3.11.5')和所用数据库的驱动依赖(如 runtime group: 'org.xerial', name: 'sqlite-jdbc', version: '3.25.2')。在 buildscript 中也要添加 jOOQ 代码生成依赖(classpath 'org.jooq:jooq-codegen:3.11.5')和数据库驱动依赖(classpath group: 'org.xerial', name: 'sqlite-jdbc', version: '3.25.2')。注意一定要添加数据库依赖,否则会报错且不提示原因。

如何使用 Groovy MarkupBuilder 编写 jOOQ 代码生成配置?

使用 Groovy 的 MarkupBuilder 构建 XML 配置,例如:def writer = new StringWriter(); def xml = new groovy.xml.MarkupBuilder(writer).configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd') { jdbc() { url('jdbc:sqlite:src/main/resources/database.db') } generator() { database() { includes('.*'); excludes(); inputSchema() } target() { packageName('com.kenvix.pixiv.generated.jooq'); directory('src/main/java') } } }。然后调用 org.jooq.codegen.GenerationTool.generate(writer.toString()) 执行生成。

jOOQ 代码生成配置中需要指定哪些关键元素?

需要指定 JDBC 连接信息(url,可选 user 和 password)、包含的表(includes)、排除的表(excludes)、输入 schema(inputSchema)、目标包名(packageName)和目标目录(directory)。

如何执行 jOOQ 代码生成并验证配置是否成功?

在 build.gradle 中调用 org.jooq.codegen.GenerationTool.generate(writer.toString()) 执行生成。然后运行 gradlew buildEnvironment 查看 jOOQ 是否有警告,同时会发现代码已生成。

🏷️

标签

➡️

继续阅读