Scala で jOOQ

2018/04/06   #jOOQ  #Scala 
このエントリーをはてなブックマークに追加

Scala だとこんな感じで、postfixOps と for 式の中なら改行しても大丈夫なことを利用して、より SQL チックに書くことができる。
なかなか感動的。

package repository

import foo.bar.baz.springbootscala.dao.Tables._
import foo.bar.baz.springbootscala.entity.{Emp, EmpId}
import org.jooq.{DSLContext, Record}
import org.jooq.scalaextensions.Conversions._
import org.springframework.stereotype.Component

import scala.language.postfixOps

@Component
class EmpRepository(sql: DSLContext) extends Repository[Emp] {

  override def resolveById(id: EmpId): Option[Emp] = {
    for (r <- sql
      selectFrom
        EMPS
      where
        EMPS.EMP_ID === id.value
      fetchOneOption
    ) yield r.into(classOf[Emp])
  }

  override def store(entity: Emp): Emp = {
    val stored: Record = for (r <- sql
      insertInto(EMPS, EMPS.NAME, EMPS.AGE)
        values (entity.name, entity.age.get)
      returning EMPS.EMP_ID
      fetchOne
    ) yield r

    val id = stored.getValue(EMPS.EMP_ID)
    :
  }

}