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 中没有意义。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!