Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11
jOOQ and Scala
Supported by ✅ Open Source Edition ✅ Express Edition ✅ Professional Edition ✅ Enterprise Edition
As any other library, jOOQ can be easily used in Scala, taking advantage of the many Scala language features such as for example:
- Optional "." to dereference methods from expressions
- Optional "(" and ")" to delimit method argument lists
- Optional ";" at the end of a Scala statement
- Type inference using "var" and "val" keywords
- Lambda expressions and for-comprehension syntax for record iteration and data type conversion
But jOOQ also leverages other useful Scala features, such as
- implicit defs for operator overloading
- Scala Macros (soon to come)
All of the above heavily improve jOOQ's querying DSL API experience for Scala developers.
A short example jOOQ application in Scala might look like this:
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) //
} //
} //
}
For more details about jOOQ's Scala integration, please refer to the manual's section about SQL building with Scala.
Feedback
Do you have any feedback about this page? We'd love to hear it!