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)
:
}
}