scala - 在 slick 3 项目中管理 MappedColumnType 转换

标签 scala slick slick-3.0

我正在尝试为新的 Slick 3 项目构建自定义数据库列转换器。使用 MappedColumnType 制作这些非常容易,但您必须导入驱动程序 api。对于单个 DAO 类中的一次性类型,这是直接的。但我想在所有 DAO 对象中使用我的自定义列类型。我无法以编译器可以识别隐式的方式构建导入。

这是我想要构建的库类型的示例。它有一个转换器,与许多 Slick 2 示例中常见的 Joda 日期转换器非常相似。

package dao

import java.sql.Date

import data.Timestamp
import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider}
import slick.driver.JdbcProfile

case class StandardConversions(protected val dbConfigProvider: DatabaseConfigProvider)
  extends HasDatabaseConfigProvider[JdbcProfile] {
  import driver.api._

  implicit val timestampColumnType = MappedColumnType.base[Timestamp, Date](
    { data => new Date(data.value) },
    { sql => Timestamp(sql.getTime) }
  )

}

在 DAO 类中,我尝试像这样进行导入:

val conversions = StandardConversions(dbConfigProvider)
import conversions._

编译器错误是熟悉的:

could not find implicit value for parameter tt: slick.ast.TypedType[data.Timestamp]

我基本上陷入了依赖注入(inject),隐式 hell 。有人想出了在 Slick 3 中维护自定义转换的好方法吗?请分享。

最佳答案

这就是特质派上用场的地方:

package dao

import java.sql.Date
import data.Timestamp

import play.api.db.slick.HasDatabaseConfig
import slick.driver.JdbcProfile

trait StandardConversions extends HasDatabaseConfigProvider[JdbcProfile] {
  import driver.api._

  implicit val timestampColumnType = MappedColumnType.base[Timestamp, Date](
    { data => new Date(data.value) },
    { sql => Timestamp(sql.getTime) }
  )
}

然后简单地在 DAO 中扩展此特征:

class SomeDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
  extends HasDatabaseConfigProvider[JdbcProfile]
  with StandardConversions {

  import driver.api._

  // all implicits of StandardConversions are in scope here
}

关于scala - 在 slick 3 项目中管理 MappedColumnType 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567305/

相关文章:

scala - 如何在 IDEA 12 中使用外部 Scala 编译器?

scala - 是否可以将 sbt testOnly 与 Slick TestKit 一起使用?

mysql - 未解析的符号列 - Scala Slick

java - 我如何将表导入另一个类(/对象??)以便我可以在另一个类/对象中对其运行查询? [圆滑 3.0][scala]

mysql - 使用 Slick 3.0 与同一个表进行两个连接

inheritance - 扩展扩展有序的Scala类

scala - 在多项目 Build.sbt 中分解 libraryDependencies

scala - 如何使用 spray-json 库将 toJson 应用于案例类的实例

scala - 为什么这两个 Slick 查询不等价?

mysql - 有条件地删除光滑的表