我目前正在评估JOOQ
,因为我相信我开始重新发明看起来非常接近JOOQ
部分的轮子了。)
现在,在深入了解JOOQ
文档时,我发现我的用例位于Using JOOQ as SQL Builder和Using JOOQ as SQL Builder with Code generation之间,即我想:
DSL.fieldByName("BOOK","TITLE")
构造,而是更喜欢存储表的名称及其列名和类型,如Using JOOQ as SQL Builder with Code generation part TableImpl
。在深入阅读手册时,我发现表格实现在第Generated tables章中的表现如何。但是,TableImpl类和Table接口应该使用记录类型进行参数化,同样适用于TableField类。我相信这是为了在直接查询数据库和检索结果时更容易进行类型推断,尽管我可能会弄错。
所以我的问题是:
java.lang.Void
类作为类型参数但后来我注意到只允许Record的子类...原因是我根本不需要记录类型因为我打算使用由JOOQ
SQL查询生成的Spring JdbcTemplate之类的映射,因此映射由我自己完成。提前感谢您的帮助!
答案 0 :(得分:2)
考虑到你的用例,我不确定你为什么要推出自己的Table
和TableField
实现,而不是使用jOOQ生成的实现。正如您所说,每次数据库架构更改时,您都不会拥有来重新生成该代码。许多用户只会偶尔生成一次架构,然后将生成的文件放在版本控制之下。这有助于您跟踪新添加的更改。
回答你的问题:
CustomTable
的例子。您还可以在sharing similar experiences 是的,您可以使用Record
。您的最小自定义表类型将是:
class X extends TableImpl<Record> {
public X() {
super("x");
}
}
请注意,您将使用jOOQ的内部 API(TableImpl
),这是非官方支持的。虽然我很肯定它会起作用,但未来它可能会破裂,例如因为超级构造函数签名可能会改变。