Jooq 需要事先创建一些表。您可以为此使用 Flyway(并且您也应该使用它的迁移)。
一旦你有了所有的表,你可以使用这个 sn-p 让 Jooq 为你的表生成源文件:
import org.jooq.util.GenerationTool;
import org.jooq.util.jaxb.*;
Configuration configuration = new Configuration()
.withJdbc(new Jdbc()
.withDriver("org.postgresql.Driver")
.withUrl("jdbc:postgresql://localhost/your_database")
.withUser("username")
.withPassword("password"))
.withGenerator(new Generator()
.withName("org.jooq.util.DefaultGenerator")
.withDatabase(new Database()
.withName("org.jooq.util.postgres.PostgresDatabase")
.withIncludes(".*")
.withSchemata(new Schema().withInputSchema("your_schema"))
)
.withTarget(new Target()
.withPackageName("jooq.generate")
.withDirectory("src/main/java")));
try {
GenerationTool.generate(configuration);
} catch (Exception e) {
e.printStackTrace();
}
这将在src/main/java path 上留下一些.java 文件。使用您的数据库设置等配置 sn-p。
这大致就是我们在工作项目中做事的方式。 Jooq 与Flyway 配合得非常好。你可以查看 Jooq 关于Code generation 的文档。
有一个我们不使用的 maven 插件,因为我们有一个多租户设置,需要在数据库迁移和代码生成时进行一些运行时配置。
我想一旦你在某个类的静态 main 方法中准备好你的 Jooq 生成,你就可以从一个 gradle 任务中运行它。我只能向您指出 Jooq 关于从 gradle here 运行它的文档
编辑:在查看了文档和我自己生成的代码后,我发现您可以扩展 Record 和 TableImpl<Record> 类来生成您手动创建的架构类。
你可以看到here 一个小例子sn-p 对Record 和Table 类的重要部分。
无论如何,请考虑到 Jooq(和 Flyway)不希望您避免使用 SQL,而是接受它。正常的做事方式是
- 您使用 SQL 脚本创建数据库对象
- 您使用 Jooq 生成器生成架构类
- 您可以将它们与 Jooq 的 DSL 上下文一起使用。