jOOQ 和 Scala
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
与其他库一样,jOOQ 可以轻松地在 Scala 中使用,并利用 Scala 的许多语言特性,例如
- 从表达式中取消引用方法的可选 "."
- 分隔方法参数列表的可选 "(" 和 ")"
- Scala 语句末尾的可选 ";"
- 使用 "var" 和 "val" 关键字进行类型推断
- Lambda 表达式和 for-comprehension 语法,用于记录迭代和数据类型转换
但是 jOOQ 也利用了其他有用的 Scala 特性,例如
- 用于运算符重载的 implicit defs
- Scala Macros(即将推出)
以上所有这些都极大地改善了 Scala 开发人员的 jOOQ 查询 DSL API 体验。
一个简短的 Scala jOOQ 应用程序可能如下所示
import collection.JavaConversions._ // Import implicit defs for iteration over org.jooq.Result
//
import java.sql.DriverManager //
//
import org.jooq._ //
import org.jooq.impl._ //
import org.jooq.impl.DSL._ //
import org.jooq.examples.scala.h2.Tables._ //
import org.jooq.scalaextensions.Conversions._ // Import implicit defs for overloaded jOOQ/SQL operators
//
object Test { //
def main(args: Array[String]): Unit = { //
val c = DriverManager.getConnection("jdbc:h2:~/test", "sa", ""); // Standard JDBC connection
val e = DSL.using(c, SQLDialect.H2); //
val x = AUTHOR as "x" // SQL-esque table aliasing
//
for (r <- e // Iteration over Result. "r" is an org.jooq.Record3
select ( //
BOOK.ID * BOOK.AUTHOR_ID, // Using the overloaded "*" operator
BOOK.ID + BOOK.AUTHOR_ID * 3 + 4, // Using the overloaded "+" operator
BOOK.TITLE || " abc" || " xy" // Using the overloaded "||" operator
) //
from BOOK // No need to use parentheses or "." here
leftOuterJoin ( //
select (x.ID, x.YEAR_OF_BIRTH) // Dereference fields from aliased table
from x //
limit 1 //
asTable x.getName() //
) //
on BOOK.AUTHOR_ID === x.ID // Using the overloaded "===" operator
where (BOOK.ID <> 2) // Using the olerloaded "<>" operator
or (BOOK.TITLE in ("O Alquimista", "Brida")) // Neat IN predicate expression
fetch //
) { //
println(r) //
} //
} //
}
有关 jOOQ Scala 集成的更多详细信息,请参阅手册中关于 使用 Scala 构建 SQL 的部分。
反馈
您对此页面有任何反馈吗? 我们很乐意听到!