首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将slick2.1 StaticQuery迁移到slick3.1

将slick2.1 StaticQuery迁移到slick3.1
EN

Stack Overflow用户
提问于 2018-10-24 18:18:54
回答 1查看 223关注 0票数 0

在Play应用程序中,我试图将一些代码从slick2.1迁移到slick3.1,关于DBIO动作的文档完全超出了我的范围。我很难在网上的任何地方找到例子,说明如何将StaticQuery的使用迁移到slick3.1。下面是我在slick2.1中的代码:

代码语言:javascript
复制
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

类似的问题:

如何在Slick 3.0.0中使用StaticQuery?

如何将Slick 2.1普通SQL查询移植到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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 09:21:18

例如,您有case类Region

代码语言:javascript
复制
case class Region(id: Int, name: String, code: String)

在第一步中,您需要通过提供GetResult隐式会话来告诉slick如何将sql结果映射到您的case类:

代码语言:javascript
复制
implicit val regionGetResult = GetResult(r => Region(r.nextInt, r.nextString, r.nextString))

而不是构建DBIOAction:

代码语言:javascript
复制
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 => ...)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52975623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档