jOOQ 和 Kotlin
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
与其他任何库一样,jOOQ 可以轻松地在 Kotlin 中使用,并利用许多 Kotlin 语言特性,例如
- Kotlin 语句末尾的可选“;”
- 局部变量的类型推断
一个简短的 Kotlin jOOQ 应用程序可能如下所示
package org.jooq.example.kotlin
import java.util.Properties
import org.jooq.*
import org.jooq.impl.DSL
import org.jooq.impl.DSL.*
import org.jooq.example.db.h2.Tables.*
fun main(args: Array<String>) {
val properties = Properties();
properties.load(Properties::class.java.getResourceAsStream("/config.properties"));
DSL.using(
properties.getProperty("db.url"),
properties.getProperty("db.username"),
properties.getProperty("db.password")
).use { ctx ->
val a = AUTHOR
val b = BOOK
ctx.select(a.FIRST_NAME, a.LAST_NAME, b.TITLE)
.from(a)
.join(b).on(a.ID.eq(b.AUTHOR_ID))
.orderBy(1, 2, 3)
.forEach {
println("${it[b.TITLE]} by ${it[a.FIRST_NAME]} ${it[a.LAST_NAME]}")
}
}
}
请注意,Kotlin 支持某些运算符重载方式。例如,Kotlin 中的 a + b 映射到正式的 a.plus(b) 方法调用,jOOQ 在其 API 中提供了所需的同义词来帮助您编写此类表达式。
一个特别好的语言特性是[方括号]允许通过 get() 和 set() 方法访问任何对象的内容。我们可以像这样迭代,而不是使用上面的 value1()、value2() 和 value3() 方法
ctx.select(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, BOOK.TITLE)
.from(AUTHOR)
.join(BOOK).on(AUTHOR.ID.eq(BOOK.AUTHOR_ID))
.orderBy(1, 2, 3)
.forEach {
println("${it[BOOK.TITLE]} by ${it[AUTHOR.FIRST_NAME]} ${it[AUTHOR.LAST_NAME]}")
// Notice: ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
}
Kotlin 运算符重载的一个注意事项是,诸如 == 或 >= 之类的运算符分别映射到 a.equals(b)、a.compareTo(b) == 0、a.compareTo(b) >= 0。 这种行为在像 jOOQ 这样的流畅 API 中没有意义。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!