将所有含义移动到公共对象

时间:2017-01-04 00:36:02

标签: scala slick

我正在尝试将所有的implicits移动到一个公共对象,以便我可以在所有DAO类中使用它们,但我无法正确设置它。

到目前为止,我有这个:

package com.example.dao

import java.sql.Timestamp
import java.time.Instant

import play.api.db.slick.DatabaseConfigProvider
import play.api.db.slick.HasDatabaseConfigProvider
import slick.driver.JdbcProfile

object DbImplicits {
  import driver.api._
  implicit val dateColumnType = MappedColumnType.base[Instant, Timestamp](
    i => Timestamp.from(i),
    ts => {
      ts.toInstant

    }
  )
}

我收到此错误:

not found: object driver

1 个答案:

答案 0 :(得分:1)

在您的DAO中,它取自扩展特征HasDatabaseConfigProvider

只需将您的对话放入trait然后(trait DbImplicits),这些对话需要与HasDatabaseConfigProvider一起混合或扩展。{/ p>

trait DbImplicits { self: HasDatabaseConfigProvider[JdbcProfile] =>
  import self.driver._

    implicit val dateColumnType = MappedColumnType.base[Instant, Timestamp](
        i => Timestamp.from(i),
        ts => {
           ts.toInstant
        }
    )
}

稍后使用它:

class MyClassUsingImplicits @Inject()(
    protected val dbConfigProvider: DatabaseConfigProvider
) extends HasDatabaseConfigProvider[JdbcProfile] 
  with DbImplicits {
  import driver._

  // your further code comes here
}

所有这些都是play-slick特有的。

我还更新了原始答案:https://stackoverflow.com/a/41437295/2239369