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

jOOQ 和 Groovy

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

和任何其他库一样,jOOQ 可以很容易地在 Groovy 中使用,利用 Groovy 语言的许多特性,例如

  • Groovy 语句末尾可选的 ";"
  • 局部变量的类型推断

一个简短的 Groovy jOOQ 应用程序可能如下所示

package org.jooq.groovy

import static org.jooq.impl.DSL.*
import static org.jooq.groovy.example.h2.Tables.*

import groovy.sql.Sql
import org.jooq.*
import org.jooq.impl.DSL

sql = Sql.newInstance('jdbc:h2:~/groovy-test', 'sa', '', 'org.h2.Driver');

a = AUTHOR.as("a");
b = BOOK.as("b")

DSL.using(sql.connection)
   .select(a.FIRST_NAME, a.LAST_NAME, b.TITLE)
   .from(a)
   .join(b).on(a.ID.eq(b.AUTHOR_ID))
   .fetchInto ({
       r -> println(
           "${r.getValue(a.FIRST_NAME)} " +
           "${r.getValue(a.LAST_NAME)} " +
           "has written ${r.getValue(b.TITLE)}"
       )
   } as RecordHandler)

请注意,虽然 Groovy 支持一些运算符重载的方法,但我们认为这些方法应该在 jOOQ 集成中避免。例如,Groovy 中的 a + b 映射到正式的 a.plus(b) 方法调用,jOOQ 在其 API 中提供了所需的同义词来帮助您编写此类表达式。尽管如此,Groovy 提供的类型安全性很低,因此,运算符重载可能会导致许多运行时问题。

Groovy 运算符重载的另一个需要注意的地方是,诸如 ==>= 之类的运算符分别映射到 a.equals(b)a.compareTo(b) == 0a.compareTo(b) >= 0。这种行为在像 jOOQ 这样的流畅 API 中没有意义。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo