我正在使用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
}
}
答案 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)
}