Scala 使用play slick,如何使用配置生成的数据库API定义通用组件
我正在尝试实现这一点: 该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要Scala 使用play slick,如何使用配置生成的数据库API定义通用组件,scala,playframework,slick,Scala,Playframework,Slick,我正在尝试实现这一点: 该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要 XXXX extends HasDatabaseConfigProvider[JdbcProfile] { import profile.api._ 在我可以使用很多灵活的功能之前,例如表。这是一个问题,因为我需要访问: abstract class BaseTable[E: ClassTag](tag: Tag, schemaName: [String]
XXXX extends HasDatabaseConfigProvider[JdbcProfile] {
import profile.api._
在我可以使用很多灵活的功能之前,例如表
。这是一个问题,因为我需要访问:
abstract class BaseTable[E: ClassTag](tag: Tag, schemaName: [String], tableName: String)
extends Table[E](tag, schemaName, tableName) {
val classOfEntity = classTag[E].runtimeClass
val id: Rep[Long] = column[Long]("id", O.PrimaryKey, O.AutoInc)
}
但是标记和表都是ConfigAPI的一部分
我喜欢这个实现,并且希望使用尽可能接近它的东西。我在这里找到了一个类似的解决方案,但它有点难以遵循,我也不太喜欢这个结果
我可以实现我想要的模式吗,或者我应该开始寻找替代解决方案吗?您可以试试这个 BaseTable.scala
abstract class BaseTable(tag: Tag) extends Table[basetable](tag, "tableName") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def * = (id, name) <>((basetable.apply _).tupled, basetable.unapply)
}
case class basetable(id:Long,name:String)
object basetable{
implicit val basetableFormat = Json.format[basetable]
}
巴塞雷波斯卡拉酒店
class baseRepo @Inject()(@NamedDatabase("databases name") dbConfigProvider: DatabaseConfigProvider) {
private val baseTable = TableQuery[BaseTable]
private val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig._
/**
* search id
* */
def FindById(id:Long): Future[Seq[basetable]] = db.run(
baseTable.filter(_.id === id).result
)
}
不幸的是,这种方法不起作用,因为我无法在继承级别访问db profile api,除非我将所有内容都包装在一个trait中,在这一点上,我对所有组件都失去了可见性