【问题标题】:Migrating Slick 2.1 StaticQuery to Slick 3.1将 Slick 2.1 StaticQuery 迁移到 Slick 3.1
【发布时间】:2018-10-25 18:23:56
【问题描述】:

我正在尝试在 Play 应用程序中将一些代码从 Slick 2.1 迁移到 Slick 3.1,而 DBIO Actions 上的文档完全超出了我的想象。而且我很难在网上的任何地方找到展示如何将 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

类似问题:

How to use StaticQuery in Slick 3.0.0?

How to port Slick 2.1 plain SQL queries to 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

【问题讨论】:

    标签: scala upgrade slick slick-3.0


    【解决方案1】:

    例如你有案例类Region

    case class Region(id: Int, name: String, code: String)
    

    首先,您需要通过提供GetResult 隐式对话来告诉 slick 如何将 sql 结果映射到您的案例类:

    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 => ...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 2015-08-31
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      相关资源
      最近更新 更多