可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

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 的部分。

反馈

您对此页面有任何反馈吗? 我们很乐意听到!

The jOOQ Logo