当前位置: 首页 > 知识库问答 >
问题:

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

邹嘉石
2023-03-14

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

现在,在挖掘伟大的JOOQ留档时,我发现我的用例介于使用JOOQ作为SQL生成器和使用JOOQ作为SQL生成器之间。我想:

  1. 创建普通SQL字符串,如使用JOOQ作为SQLBuilder部分所示
  2. 而不是使用硬编码的DSL. field dByName("BOOK","TITLE")构造,我更喜欢存储表的名称以及它的列名和类型,如使用JOOQ作为SQLBuilder与Code生成部分所示>
  3. 我不喜欢使用代码生成(至少不是定期),而是在需要新表时自己创建TableImpl

在翻阅手册的过程中,我发现了表实现在生成表一章中应该是什么样子。然而,TableImpl类和表接口应该用记录类型参数化,TableField类也是如此。我相信这样做是为了在直接查询数据库和检索结果时更容易进行类型推断,尽管我可能弄错了。

因此,我的问题是:

  1. 手册中是否有关于如何创建表和表字段实现的指南?或者我可以简单地为我的数据库模式生成它们一次,并使用生成的代码作为指导

提前感谢您的帮助!

共有1个答案

葛海阳
2023-03-14

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

回答您的问题:

>

  • 是的,有一些关于使用CustomTable的例子。你也可能会发现一些人在用户群里分享类似的经历
  • 是的,你可以只使用记录。然后,您的最小自定义表类型将是:

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

    请注意,您将使用jOOQ的内部API(TableImpl),该API不受官方支持。虽然我确信它会工作,但将来可能会中断,例如超级构造函数签名可能会更改。

  •  类似资料:
    • 我正在尝试创建一个通用类型安全方法来逐行获取一些字段,如下所示: 虽然它工作正常,但问题是我不能在这里提供字段类型作为第二个泛型参数: 因为它只知道字段本身,所以可能会导致堆污染问题。 我很乐意将我的签名改为: 但是只接受其类型作为泛型参数,而不是记录类型。 在JOOQ代码库中,字段类是否有绑定到其记录类型的子/父类? 谢谢

    • 问题内容: 我正在写一个PHP应用程序,它将学生数据存储在MySQL关系数据库中。我试图找到最好的方式/数据类型来存储一个月和一年在一起,而没有一天。我不知道是否应该将其存储为DATE并以某种方式使用php将日期存储为第一天,或使用我目前不熟悉的其他数据类型。理想情况下,我不想存储一天,因为一天不会总是相同的,并且如果将来更改一天,则需要更改php源代码。 为了获取更多背景信息,我存储了一个学生的

    • 我正在向spring启动项目添加缓存。应用程序。yml包含 @EnableCaching位于主应用程序上,我已将@Cacheable(“cacheName”)添加到该方法中,同一类中的另一个方法不会调用它。 在测试中,我看到缓存是NoOp类型的,而不是咖啡因。我已确保在所有情况下都使用正确的导入(springframework)。我还应该在哪里启用缓存?

    • 主存储库文件 ==================================自定义存储库 ============================================ 定制回购方法的实现 ===================================================== 服务等级 在myRepository上遇到异常请考虑定义一个myRepository类

    • 我有一个表USER\u ROLES,有5列。此外,还有一个类UserRole,其字段和名称的数量与USER\u角色相同。 我试图插入一行而不指定列名: 但是当我尝试创建行时,我得到了这个错误: 我必须指定列名吗?

    • 问题内容: 所以我的问题是,我在Android(Java)上编写了一个函数,该函数需要两个Double,两个Int和一个Calendar对象。我相信提供的允许它在单独的线程中运行的类AsyncTask仅接受一种类型的Object(但允许多种)作为参数,因此我认为我可以将其放入List或LinkedList或其他内容中。 是否存在允许多个数据类型()的类型,还是我必须创建自己的对象类?我是一个新手程