可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

数据库优先

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

原则上,JPA 与实体模型优先还是 DDL 优先/数据库优先的方法无关。 原则上,您可以

  • 编写 DDL(例如,使用 Flyway 或 Liquibase 进行迁移),然后重新生成您的实体代码。
  • 编写实体,然后重新生成您的数据库或从您的 git 历史记录中派生 DDL 增量等。
  • 手动并行维护两者。

jOOQ 在这里更有主见。 它假定您的数据库已经存在,在 jOOQ 之外。 它不假设您的数据库遵循 jOOQ 施加的任何设计规则。 例如,当使用 jOOQ 时,完全无关紧要

  • 如果您使用的是代理键还是自然键
  • 您的键是具有单列还是多列
  • 您的表甚至是否有键,或者它们是否不在第一范式中
  • 您的表甚至是表,还是视图、表值函数等

不仅 jOOQ 不关心您的数据库模型,它也不关心您的客户端数据表示(例如,DTO)。 也就是说,它不关心

  • 您的 DTO 类和属性是 public 还是 private
  • 您的 DTO 是不可变的还是可变的
  • 您的 DTO 是否以任何方式实现 equals()hashCode()
  • 您的 DTO 是否具有有意义的标识,或者只是基于值的类(或者很快甚至是实际的值类型!)

从 jOOQ 的角度来看,没有最佳实践。 jOOQ 已经见过一切,jOOQ 不会评判你。 jOOQ 知道,如果您的表甚至不在第一范式中,您已经有很多问题了,所以您也不需要 jOOQ 的问题。

但是

但是,再说一次,jOOQ 希望您拥有一个已经存在的数据库。 是的,您甚至可以使用 jOOQ 用于您的 DDL,但这里的重点是您首先编写 DDL,然后稍后编写 jOOQ 查询,理想情况下使用源代码生成

客户端应用程序来来去去。 它们曾经用 Delphi 编写。 然后是 PHP。 然后是 Java。 现在是 Kotlin。 很快是 TypeScript/Rust/Go/Whatever? 但您的数据库会留下来。 它会在您的客户端应用程序中幸存下来,因此,jOOQ 明白您的数据库必须放在首位。

显然,存在其他思考业务逻辑和数据库的方式。 但 jOOQ 是为数据库优先模型设计的。

反馈

您对此页面有任何反馈吗? 我们很乐意听到它!

The jOOQ Logo