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 的部分。
反馈
您对此页面有任何反馈吗? 我们很乐意听到!