Slick 3.0.3 警告:特性 DatabaseFactoryDef 中的方法 dynamicSession 已弃用
Slick 3.0.3 warning: method dynamicSession in trait DatabaseFactoryDef is deprecated
我正在使用 Slick 3.0.3,我很满意 Plain SQL 方法将结果集映射到案例 类。但是,以下代码会产生警告 method dynamicSession in trait DatabaseFactoryDef is deprecated: Use the new Action-based API instead
。在研究了 Slick 文档和 migration jungles 之后,我仍然需要找到它们对 "new Action-based 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
}
}
新的 API 是通过 {driver}.api._
包导入的。 Slick 3 是完全异步的,它 returns Future
实例用于任何 运行 使用此 API 的操作,因此您需要更改 return 类型你的功能相应。只需在 Database
实例上使用 run
函数,并在语句中将使用 result
方法创建的 DBIOAction
实例传递给它;使用字符串插值器创建实际语句的示例可以是:
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)
}
我正在使用 Slick 3.0.3,我很满意 Plain SQL 方法将结果集映射到案例 类。但是,以下代码会产生警告 method dynamicSession in trait DatabaseFactoryDef is deprecated: Use the new Action-based API instead
。在研究了 Slick 文档和 migration jungles 之后,我仍然需要找到它们对 "new Action-based 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
}
}
新的 API 是通过 {driver}.api._
包导入的。 Slick 3 是完全异步的,它 returns Future
实例用于任何 运行 使用此 API 的操作,因此您需要更改 return 类型你的功能相应。只需在 Database
实例上使用 run
函数,并在语句中将使用 result
方法创建的 DBIOAction
实例传递给它;使用字符串插值器创建实际语句的示例可以是:
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)
}