jOOQ 3.14现已发布,支撑SQL/XML、SQL/JSON、Kotlin代码生成、可嵌入类型和域类型、组成束缚、更好的MERGE支撑以及更多SQL转化

在这个版别中,咱们根据用户反应对github问题进行了分类,终究完成了一些最想要的功用,其间包含更好的 Kotlin支撑、可嵌入类型和域类型支撑。除此之外,咱们信任咱们新增加的对XML和JSON操作的支撑将成为未来ORM与SQL数据库交互方式的一个领先的游戏改变者

XML和JSON

规范SQL长期以来一直支撑SQL/XML,而且从最近开端,大多数RDBMS也,支撑规范SQL/JSON或其供货商的特定变体。虽然ORDBMS的扩展从未得到应有的采用,但XML和JSON却得到了采用。偶然对数据进行去规范化处理,并直接将文档存储在数据库,是有意义的。但是,这并不是咱们最兴奋的事情。

咱们为咱们对一切花哨的操作符的支撑感到兴奋,比方:

  • JSON_TABLE将JSON值变成SQL表
  • JSON_ARRAY, JSON_OBJECT, JSON_VALUE从值中结构JSON数据
  • JSON_ARRAYAGG, JSON_OBJECTAGG将数据聚组成嵌套的JSON文档。
  • JSON_EXISTS用于查询具有JSON途径的文件。

相似的函数也可用于XML,如XMLTABLE、XMLELEMENT、XMLAGG等。
jOOQ 3.14的一切版别都支撑规范的SQL XML和JSON操作符,并在有非规范支撑的当地(如PostgreSQL和SQL Server),模仿它们。商业版别还支撑SQL Server十分便利的FOR XML和FOR JSON APIs,在其他当地运用规范操作符来模仿该语法见:

blog.jooq.org/2020/05/05/…

但这还不是悉数! 假如你在classpath上有Gson、Jackson或JAXB,咱们可以运用它将org.jooq.XML、org.jooq.JSON、org.jooq.JSONB类型从你的查询成果主动映射到你的嵌套数据结构见:

blog.jooq.org/2020/10/09/…

这些方法是十分强大的。在许多情况下,你可以越过,直接将REST或相似的端点绑定到jOOQ / SQL查询,为你的前端产生JSON:

blog.jooq.org/2019/11/13/…

支撑Kotlin

咱们长期支撑一些Scala扩展和ScalaGenerator。Kotlin是一种额定的十分有前途的JVM言语,其间一个新的jOOQ-kotlin模块以及KotlinGenerator将为你的jOOQ/Kotlin整合增加许多价值。KotlinGenerator供给了,除其他事项外:

  • 对生成的POJO的数据类支撑
  • 对生成的POJO、接口和记载的特点支撑
  • 更好的无效性支撑

jOOQ-kotlin模块供给了一些有用的扩展功用,以进一步改善jOOQ/Kotlin集成的体验:

除了上述内容外,咱们还用JetBrains的nullability
注释来注释整个jOOQ API:

  • org.jetbrains.annotations.Nullable
  • org.jetbrains.annotations.NotNull

这将消除你的Kotlin/jOOQ代码中许多恼人的T!类型,把它们变成T或T?类型,让你更有决心。经过这些改善,咱们还严格检查了咱们现有的ScalaGenerator,修复了许多bug。

可嵌入类型

jOOQ 3.14中最大的新特性之一是遭到JPA的启示,它在,并带有可嵌入类型。可嵌入类型是对数据库用户界说类型(UDT)的模仿,只要Oracle和PostgreSQL支撑这种类型。这种类型最大的优点是在你的数据库模式中创立更多的语义、复合数据类型,并从额定的类型安全中获益。
咱们对该功用的解说主要是在源代码生成器中,它的输出现在变得更有价值了。一切的jOOQ版别都支撑基本的根底设施,以模式匹配列集,并将它们变成组成的可嵌入类型。
除了上述内容外,咱们的商业版别还供给了一些主动配置
的可嵌入类型,在这种情况下,它们才真实发挥了作用:

  • 对于主/仅有束缚和其匹配的外键
  • 对于DOMAIN类型(见下文)
  • 处理堆叠的可嵌入类型
  • 答应可嵌入类型替代其根底列

咱们把这个概念比JPA更进一步。在jOOQ中,可嵌入类型可以作为,作为底层列的视图,而不替代它们,或者像JPA中那样作为一个替换。jOOQ尊重关系建模的一切层次,包含,堆叠的束缚,然后答应两个可嵌入类型堆叠起来。
更多信息,请参阅:

www.jooq.org/doc/3.14/ma…

DOMAIN类型

提到类型,一些数据库方言支撑规范的SQL DOMAIN类型,这是一种更简略的UDTs方式。与其运用像VARCHAR(10)这样的低级技能类型,为什么不给你的单列类型起个名字,并给它们增加一些可重复运用的CHECK束缚呢?
这就是DOMAIN类型:

  • 一个命名的类型
  • 对一个技能类型进行别名,比方VARCHAR(10)
  • 或许会增加一个DEFAULT表达式
  • 或许增加一个NOT NULL束缚条件
  • 或许增加一组CHECK束缚

以上一切内容都可以在你的模式中重复运用,假如你有商业,你乃至可以让代码生成器为你的一切领域主动生成可嵌入的类型,以便从Java的额定类型安全中获益。

欲了解更多信息,请参阅:

  • www.jooq.org/doc/3.14/ma…
  • www.jooq.org/doc/3.14/ma…

组成束缚

与上述改善的代码生成器输出相关的是组成对象,如以前支撑的组成主键,现在也支撑组成仅有键和外键。
假如你在数据库中对安全性和可重复运用的组件进行了许多出资,你会许多运用SQL视图。不幸的是,视图没有任何像外键束缚那样的元数据–尽管元数据对你数据库设计者来说是 “显而易见 “的。经过组成束缚,你可以告知jOOQ你对底层束缚的常识。

元数据对jOOQ可用的主要优点是:

  • 你现在也可以在视图上运用隐式连接了
  • 你现在可以在视图上运用JOIN …在视图上也可以运用JOIN … ON KEY语法
  • 你可以在视图上运用之前的可嵌入键类型,就像在表上相同

欲了解更多信息,请参阅:

  • www.jooq.org/doc/3.14/ma…
  • www.jooq.org/doc/3.14/ma…

更好的MERGE支撑

咱们终于处理了对更高级的MERGE语句子的支撑,现在支撑 :

  • 多个WHEN MATCHED AND condition THEN UPDATE子句
  • 多个WHEN MATCHED AND condition THEN DELETE子句
  • UpdatableRecord.merge()和一切相关的好东西来简化记载的合并。

转化

有了解析器和咱们的翻译东西(https://www.jooq.org/translate),咱们将,越来越多地投入到新的用例中,把jOOQ作为Java中的一个可嵌入的DSL来运用。
咱们的翻译能力现已很强了,有了一套新的SQL转化,它们会变得愈加强大,协助客户从RDBMS A 迁移到RDBMS B(假如他们犯了错误,还可以回来)。
虽然咱们的网站翻译器是免费的,但jOOQ库总是可以,以编程方式运用,或作为一个命令行东西。

www.jooq.org/doc/3.14/ma…

为了使这种运用情况愈加有用,现已增加了新的转化功用,包含:

  • ROWNUM到LIMIT或ROW_NUMBER()
  • 表列表到ANSI JOIN(包含Oracle(+)支撑)
  • 不必要的算术表达式

这是一个令人兴奋的领域,咱们将在未来为咱们的商业授权客户进行探索,同时乃至jOOQ开源版也从
这些改善中获利。例如,为转化所创立的根底设施,终于可以模仿PostgreSQL的DISTINCT ON子句,在其他当地。

更多信息,请参阅:

  • www.jooq.org/doc/3.14/ma…
  • github.com/jOOQ/jOOQ/i…(未来的作业)

更好的手册

咱们退一步检查了咱们的文档的几个重要部分,咱们现在供给:

  • 代码生成器技能(XML、Programmatic、Gradle)的粘性标签。假如 ,你正在运用Gradle与jOOQ的代码生成器,你不想再看,在手册中的XML配置。这些标签终究隐藏了不需要的信息。
  • 每个函数的分节。咱们现已开端单独记载每个SQL函数,解说它在SQL中是怎么作业的,并供给一些例子和示例成果。
  • 生成供货商特定的SQL的渲染实例。咱们在生成手册时运用jOOQ,将一些jOOQ的API用法翻译成咱们一切支撑的 方言,并显现该函数在每种方言中的渲染情况。
  • 显现导入按钮并显现上下文灵敏的导入。手册中的一切例子都会让人不知所措。咱们假设了许多(静态)导入, ,咱们终究在每个代码片段的可扩展的 “显现导入 “部分记载了
  • 咱们重写了一些部分,使之更完整地包含了一些例子,例如数据导入部分。
  • 一个新的API差异页面显现了每个小版别之间的变化,Javadoc链接列表:https://www.jooq.org/api-diff