Java 使用JOOQ只存储表/列名和类型,而不考虑记录类型
我目前正在评估Java 使用JOOQ只存储表/列名和类型,而不考虑记录类型,java,jooq,Java,Jooq,我目前正在评估JOOQ,因为我相信我开始重新发明轮子,它看起来非常接近JOOQ:) 现在,在深入研究伟大的JOOQ文档时,我发现我的用例介于和之间,即我想: 创建简单的SQL字符串,如第1部分所示 与使用硬编码的DSL.fieldByName(“BOOK”、“TITLE”)结构不同,我更喜欢将表名与其列名和类型一起存储,就像部分中所示 我不喜欢使用代码生成(至少不定期),而是在需要新表时自己创建TableImpl 在翻阅手册时,我在第章中发现了表实现应该是什么样子。然而,类和接口都应该用记录类型
JOOQ
,因为我相信我开始重新发明轮子,它看起来非常接近JOOQ
:)
现在,在深入研究伟大的JOOQ
文档时,我发现我的用例介于和之间,即我想:
DSL.fieldByName(“BOOK”、“TITLE”)
结构不同,我更喜欢将表名与其列名和类型一起存储,就像部分中所示TableImpl
java.lang.Void
类作为类型参数,但后来我注意到只允许的子类。。。原因是我根本不需要记录类型,因为我计划在类似这样的情况下使用由JOOQ
SQL查询生成的数据,所以映射由我自己完成提前感谢您的帮助 考虑到您的用例,我不确定您为什么要推出自己的
表
和表域
实现,而不是使用jOOQ生成的实现。正如您自己所说的,您不必每次DB模式更改时都重新生成代码。许多用户只是偶尔生成一次模式,然后将生成的工件置于版本控制之下。这将帮助您跟踪新添加的更改
回答您的问题:
录制。您的最小自定义表类型将是:
class X extends TableImpl<Record> {
public X() {
super("x");
}
}
X类扩展了TableImpl{
公共X(){
超级(“x”);
}
}
请注意,您将使用jOOQ的内部API(TableImpl
),该API不受官方支持。虽然我确信它会工作,但将来可能会中断,例如超级构造函数签名可能会更改
在我回答之前:你为什么要避免代码生成,而最终,你想使用类似于jOOQ的代码生成器生成的人工制品?这更像是品味的问题:)通常在代码生成之后,我会检查所有生成的代码,以确保一切顺利,并知道生成了什么以及在哪里生成,所以我经常觉得自己编写代码可以让我更好地控制正在发生的事情,并让我更好地理解我正在使用的框架。但正如我所说,这更像是个人偏好,而不是理性的争论:)非常感谢你的回答——它澄清了很多!在研究了
CustomTable
和CustomField
应该如何实现之后,我发现,是的,我可能会在将来使用代码生成:),尽管我计划将数据库架构创建脚本转移到Java/JOOQ
(如果它得到支持,否则我将不得不自己编写),因为在我看来,这更安全。因此,此时我可能需要自己创建表
/字段
实例。