Миграция Slick 2.1 StaticQuery на Slick 3.1
Я пытаюсь перенести некоторый код из Slick 2.1 в Slick 3.1 в приложении Play, и документация по действиям DBIO у меня над головой. И мне трудно найти примеры где-нибудь в Интернете, которые показывают, как перенести использование StaticQuery на Slick 3.1. Вот код, который я имел в Slick 2.1:
import scala.slick.jdbc.{GetResult, StaticQuery => Q}
...
object RegionTable {
...
def selectSomething(param1: Double, param2: Double): List[Region] = db.withSession { implicit session =>
val selectSomethingQuery = Q.query[(Double, Double), Region](
"""SELECT ...""".stripMargin
)
selectSomethingQuery((param1, param2)).list
}
}
Ссылка на полный код:
https://github.com/ProjectSidewalk/SidewalkWebpage/blob/master/app/models/region/RegionTable.scala
Похожие вопросы:
Как использовать StaticQuery в Slick 3.0.0?
Как перенести простые SQL-запросы Slick 2.1 на Slick 3.0
Документация и полезные посты в блоге
http://slick.lightbend.com/doc/3.0.0/upgrade.html
http://slick.lightbend.com/doc/3.1.1/upgrade.html
1 ответ
Например, у вас есть класс дела Region
case class Region(id: Int, name: String, code: String)
На первом этапе вы должны указать Slick, как отобразить результат sql в ваш класс case, предоставив неявный диалог GetResult:
implicit val regionGetResult = GetResult(r => Region(r.nextInt, r.nextString, r.nextString))
Чем вы должны построить DBIOAction:
val selectAction = sql"""select * from regions where name = ${param1} and code = ${param2}""".as[Region]
Это вернет вас DBIO[Seq[Region]]
, Теперь вы можете выполнить это действие с db
возразить и получить Future[Seq[Region]]
в следствии:
db.run(selectAction).map(regions => ...)