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) == 0、a.compareTo(b) >= 0。这种行为在像 jOOQ 这样的流畅 API 中没有意义。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!