【问题标题】:jOOQ, Pojos, and Database First DesignjOOQ、Pojos 和数据库优先设计
【发布时间】:2019-11-27 13:25:43
【问题描述】:

我正在创建一个应用程序,但我对 jOOQ 的当前状态有点困惑。这是我第一次将 jOOQ 用于包括 CRUD 在内的所有内容,所以我可能会遗漏一些东西。

我知道 DAO 并且可能 Pojos 正在获取 deprecated,但是,我无法在 Database First Design 中解决如何处理这个问题。

我能做的最简单的事情是创建自己的 Pojos,但随后我们又回到了通常的 JPA 实体文件,如果数据库发生更改,这些文件将无法正确映射到记录。

1) 弃用生成的 pojo 是否意味着我将来必须使用自己的 Pojo 源生成器?

2) 我是否应该有一个自定义映射器,当 Pojo 无法使用 Record 对象映射字段时会抛出异常?

3) 是目前继续使用生成的 pojo 的最佳方法吗?它不是一个庞大的应用程序,但我必须选择一种策略并在大多数数据库服务中使用它。

【问题讨论】:

    标签: jooq


    【解决方案1】:

    在 jOOQ 中执行 CRUD 的默认方法是使用代码生成器生成的 UpdatableRecord 类。另见:https://www.jooq.org/doc/latest/manual/sql-execution/crud-with-updatablerecords

    Pojo 不会被弃用。 #5984 的问题描述已过时,cmets 更新。我已更新问题描述以反映这一点。

    1) 弃用生成的 pojo 是否意味着我将来必须使用自己的 Pojo 源生成器?

    不,见上文。

    2) 我是否应该有一个自定义映射器,当 Pojo 无法使用 Record 对象映射字段时会抛出异常?

    这取决于你的 pojo 应该做什么。如果您使用 jOOQ 生成的,那么开箱即用的 DefaultRecordMapper 将始终能够映射它们

    3) 是目前继续使用生成的 pojo 的最佳方法吗?这不是一个庞大的应用程序,但我必须选择一种策略并在大多数数据库服务中使用它。

    您可能不需要 POJO,UpdatableRecord 在大多数情况下就足够了。 POJO 允许在没有任何 jOOQ 依赖的情况下传输数据,例如服务器之间。

    【讨论】:

    • 感谢 Lukas,我决定暂时接受您的建议。我还创建了一个 DAO,它用我的 POJO 扩展了 DAOImpl,仅用于备份,直到我对 API 感到更舒服为止。不过我有一个问题,使用 DSL,我可以使用 fetchAnyInto()、fetchInto() 在我的 POJO 中返回数据。 UpdatableRecord API 是否有等价物? fetchSingle().into() 看起来很相似,但我担心它可能存在 null 问题。
    • @GeorgeSofianos:fetchSingle() 永远不会返回 null,但如果未找到记录则抛出异常。 Record.into() 的工作方式与所有其他 into() 方法相同,但实际上,您的记录可能是 null。您可以致电Result.map(r -> r.into(X.class))。有很多选择。
    • 谢谢,我已经阅读了 Javadoc 接口,很清楚哪些方法返回 null 哪些不返回。现在应该更容易使用 JOOQ :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多