【发布时间】:2013-11-12 21:44:06
【问题描述】:
我目前正在评估JOOQ,因为我相信我开始重新发明轮子,它看起来非常接近JOOQ 的一部分:)
现在,在挖掘出色的 JOOQ 文档时,我发现我的用例介于 Using JOOQ as SQL Builder 和 Using JOOQ as SQL Builder with Code generation 之间,即我想:
- 创建纯 SQL 字符串,如 Using JOOQ as SQL Builder 部分所示
- 而不是使用硬编码的
DSL.fieldByName("BOOK","TITLE")构造,我更喜欢存储表的名称以及它的列名和类型,就像它在Using JOOQ as SQL Builder with Code generation 部分中显示的那样 - 我不喜欢使用代码生成(至少不是定期),而是在需要新表时自己创建
TableImpl。
在阅读手册时,我在章节Generated tables 中发现了表格实现的样子。但是,TableImpl 类和 Table 接口应该使用记录类型进行参数化,TableField 类也是如此。我相信这样做是为了在直接查询数据库和检索结果时更容易进行类型推断,尽管我可能弄错了。
所以我的问题是:
- 手册中是否有关于如何创建Table 和TableField 实现的指南?或者我可以简单地为我的数据库架构生成一次并使用生成的代码作为指导?
- 如何在实现的类中优雅地“丢弃”记录类型参数?首先,我考虑使用
java.lang.Void类作为类型参数,但后来我注意到只允许Record的子类......原因是我根本不需要记录类型,因为我打算使用@生成的987654339@Spring JdbcTemplate 之类的 SQL 查询,所以映射由我自己完成。
提前感谢您的帮助!
【问题讨论】:
-
在我回答之前:为什么要避免代码生成,最终,您想使用类似于 jOOQ 的代码生成器生成的人工制品?
-
这更像是品味问题 :) 通常在代码生成之后,我无论如何都会检查所有生成的代码,以确保一切顺利并知道生成了什么以及在哪里生成,所以我经常觉得编码它我自己让我对正在发生的事情有了更多的控制,让我对我正在使用的框架有了更多的理解。但正如我所说,这更像是个人喜好而不是理性的争论:)