java - 使用 JOOQ 仅存储表/列名称和类型而不考虑记录类型

标签 java jooq

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

现在,在挖掘出色的 JOOQ 文档时,我发现我的用例位于 Using JOOQ as SQL BuilderUsing JOOQ as SQL Builder with Code generation 之间,即我想:

  1. 创建纯 SQL 字符串,如 Using JOOQ as SQL Builder 部分所示
  2. 与其使用硬编码的 DSL.fieldByName("BOOK","TITLE") 结构,我更喜欢存储表名及其列名和类型,如 Using JOOQ as SQL Builder with Code generation 部分所示
  3. 我不喜欢使用代码生成(至少不是定期使用),而是在需要新表时自己创建 TableImpl

在深入研究手册时,我在第 Generated tables 章中找到了表格实现的样子。但是,TableImpl 类以及 Table 接口(interface)应该使用记录类型进行参数化,TableField 类也是如此。我相信这样做是为了在直接查询数据库和检索结果时更容易进行类型推断,尽管我可能错了。

所以我的问题是:

  1. 手册中是否有关于如何创建 TableTableField 实现的指南?或者我可以简单地为我的数据库架构生成一次它们并将生成的代码用作指南?
  2. 如何优雅地“丢弃”已实现类中的记录类型参数?首先,我考虑过使用 java.lang.Void 类作为类型参数,但后来我注意到只允许使用 Record 的子类......原因是我根本不需要记录类型,因为我计划在类似 Spring JdbcTemplate 的地方使用由 JOOQ 生成的 SQL 查询,因此映射由我自己完成。

在此先感谢您的帮助!

最佳答案

鉴于您的用例,我不确定您为什么要推出自己的 TableTableField 实现,而不是使用 jOOQ 生成的实现。正如您自己所说,您不必 每次数据库架构更改时都重新生成该代码。许多用户只是偶尔生成模式,然后将生成的工件置于版本控制之下。这将帮助您跟踪新添加的更改。

回答您的问题:

  1. 是的,关于 CustomTable 的使用有一些例子.您可能还会发现一些人sharing similar experiencesuser group
  2. 是的,您可以只使用Record。您的最小自定义表类型将是:

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

    请注意,您将使用 jOOQ 的内部 API (TableImpl),它不受官方支持。虽然我很肯定它会起作用,但它可能会在未来崩溃,例如因为 super 构造函数签名可能会改变。

关于java - 使用 JOOQ 仅存储表/列名称和类型而不考虑记录类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731027/

相关文章:

java - Hibernate 错误地实现了多对多关系?

java - 如何将接受 Class<T> 并生成 T 的工厂方法集成到 Spring 中

java - 更改 android 中字符串数组内的字体样式/格式

java - 从客户端 gwt 读取 web.xml init-params

java - 使用 jooq 更新 hstore 字段

java - Jooq支持Sql Server 2014和2017吗?

java - 字符串文字的正则表达式匹配,包括转义序列

java - jOOQ不生成源

java - jOOQ 的 limit..offset 问题 - 没有值集

spring-boot - 如何在 jOOQ 中两次加入同一张表?