Skip to content

Scala Database Access

Database Access / ORM Libraries

Slick

JOOQ

Squeryl

SORM

Doobie

ReactiveMongo

Comparison of multiple frameworks

Database Initialization / Migration

Flyway

Modern Examples

Slick

import slick.jdbc.H2Profile.api._
import scala.concurrent.ExecutionContext.Implicits.global

class Coffees(tag: Tag) extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") {
  def name = column[String]("COF_NAME", O.PrimaryKey)
  def supID = column[Int]("SUP_ID")
  def price = column[Double]("PRICE")
  def sales = column[Int]("SALES")
  def total = column[Int]("TOTAL")
  def * = (name, supID, price, sales, total)
}
val coffees = TableQuery[Coffees]

Doobie

import doobie._
import doobie.implicits._

val program1 = sql"select 42".query[Int].unique

Quill

import io.getquill._

lazy val ctx = new PostgresJdbcContext(SnakeCase, "ctx")
import ctx._

case class Person(id: Int, name: String, age: Int)

val q = quote {
  query[Person].filter(p => p.age > 18)
}