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