Миграция Slick 2.1 StaticQuery на Slick 3.1 - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь перенести некоторый код из 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

http://slick.lightbend.com/doc/3.1.1/dbio.html

https://grokbase.com/t/gg/scalaquery/15250knfya/slick-3-removes-withsession-dont-get-caught-by-surprise

1 Ответ

0 голосов
/ 25 октября 2018

Например, у вас есть класс case 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 => ...)

...