我正在尝试实现这个:http://reactore.com/repository-patterngeneric-dao-implementation-in-scala-using-slick-3/
该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要
XXXX extends HasDatabaseConfigProvider[JdbcProfile] {
import profile.api._在我可以使用很多灵活的功能之前,比如Table。这是一个问题,因为我需要访问以下内容:
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)
}但是Tag和Table都是config API的一部分。
我喜欢这个实现,并希望使用尽可能接近它的东西。我在这里找到了一个类似的解决方案,https://stackoverflow.com/a/39504536/1676006,但它有点难以理解,而且我对结果不是很感兴趣。
我可以实现我想要的模式吗,或者我应该开始寻找替代解决方案?
发布于 2018-07-28 11:46:34
您可以尝试这个示例
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)
}basetable.scala
case class basetable(id:Long,name:String)
object basetable{
implicit val basetableFormat = Json.format[basetable]
}baseRepo.scala
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
)
}https://stackoverflow.com/questions/51486609
复制相似问题