Slick 3.0.3警告:特性DatabaseFactoryDe​​f中的方法dynamicSession已弃用

时间:2015-09-28 15:21:29

标签: scala playframework slick

我正在使用Slick 3.0.3,我对使用简单SQL方法将结果集映射到案例类感到满意。但是,以下代码会生成警告method dynamicSession in trait DatabaseFactoryDef is deprecated: Use the new Action-based API instead。在研究了Slick文档和迁移丛林后,我仍然需要找到他们对基于动作的新API"的含义。什么是干净,无警告的版本?

import play.api.db.DB
import slick.driver.PostgresDriver.backend.Database._
import slick.jdbc.{StaticQuery => Q}
import play.api.Play.current

import models.Tables._

class InstrumentDao {
  def countAllInstruments(): Int = DB.withConnection() { implicit conn =>
    Q.queryNA[Int](s"""select count(*) from "${Instrument.baseTableRow.tableName}"""").first
  }
}

1 个答案:

答案 0 :(得分:1)

通过{driver}.api._包导入新API。 Slick 3是完全异步的,它为使用此API运行的任何操作返回Future个实例,因此您需要相应地更改函数的返回类型。只需使用run实例上的Database函数,并在语句中将使用方法DBIOAction创建的result实例传递给它;使用字符串插值器创建实际语句的示例可以是:

import play.api.db.DB
import scala.concurrent.Future
import slick.driver.PostgresDriver.api._
import play.api.Play.current

import models.Tables._

class InstrumentDao {
  def countAllInstruments(): Future[Int] = db.run(sql"""select count(*) from "${Instrument.baseTableRow.tableName}"""".result.head)
}