使用JOOQ只是为了存储表/列名称和类型而不考虑记录类型

时间:2013-11-01 16:29:22

标签: java jooq

我目前正在评估JOOQ,因为我相信我开始重新发明看起来非常接近JOOQ部分的轮子了。)

现在,在深入了解JOOQ文档时,我发现我的用例位于Using JOOQ as SQL BuilderUsing JOOQ as SQL Builder with Code generation之间,即我想:

  1. 创建类似Using JOOQ as SQL Builder part
  2. 中显示的纯SQL字符串
  3. 我没有使用硬编码的DSL.fieldByName("BOOK","TITLE")构造,而是更喜欢存储表的名称及其列名和类型,如Using JOOQ as SQL Builder with Code generation part
  4. 中所示
  5. 我不想使用代码生成(至少不是定期生成代码),而是在需要新表时自己创建TableImpl
  6. 在深入阅读手册时,我发现表格实现在第Generated tables章中的表现如何。但是,TableImpl类和Table接口应该使用记录类型进行参数化,同样适用于TableField类。我相信这是为了在直接查询数据库和检索结果时更容易进行类型推断,尽管我可能会弄错。

    所以我的问题是:

    1. 手册中是否有关于如何创建TableTableField实施的指南?或者我可以简单地为我的数据库模式生成一次,并使用生成的代码作为指南?
    2. 如何在已实现的类中优雅地“丢弃”记录类型参数?首先,我考虑使用java.lang.Void类作为类型参数但后来我注意到只允许Record的子类...原因是我根本不需要记录类型因为我打算使用由JOOQ SQL查询生成的Spring JdbcTemplate之类的映射,因此映射由我自己完成。
    3. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

考虑到你的用例,我不确定你为什么要推出自己的TableTableField实现,而不是使用jOOQ生成的实现。正如您所说,每次数据库架构更改时,您都不会拥有来重新生成该代码。许多用户只会偶尔生成一次架构,然后将生成的文件放在版本控制之下。这有助于您跟踪新添加的更改。

回答你的问题:

  1. 是的,有一些使用CustomTable的例子。您还可以在sharing similar experiences
  2. 上找到一些人user group
  3. 是的,您可以使用Record。您的最小自定义表类型将是:

    class X extends TableImpl<Record> {
        public X() {
            super("x");
        }
    }
    

    请注意,您将使用jOOQ的内部 API(TableImpl),这是非官方支持的。虽然我很肯定它会起作用,但未来它可能会破裂,例如因为超级构造函数签名可能会改变。