首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用play-slick,我如何使用配置生成的数据库apis定义通用组件

使用play-slick,我如何使用配置生成的数据库apis定义通用组件
EN

Stack Overflow用户
提问于 2018-07-24 04:14:51
回答 1查看 52关注 0票数 0

我正在尝试实现这个:http://reactore.com/repository-patterngeneric-dao-implementation-in-scala-using-slick-3/

该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要

代码语言:javascript
复制
XXXX  extends HasDatabaseConfigProvider[JdbcProfile] {

    import profile.api._

在我可以使用很多灵活的功能之前,比如Table。这是一个问题,因为我需要访问以下内容:

代码语言:javascript
复制
 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,但它有点难以理解,而且我对结果不是很感兴趣。

我可以实现我想要的模式吗,或者我应该开始寻找替代解决方案?

EN

回答 1

Stack Overflow用户

发布于 2018-07-28 11:46:34

您可以尝试这个示例

BaseTable.scala

代码语言:javascript
复制
  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

代码语言:javascript
复制
case class basetable(id:Long,name:String)

object basetable{
  implicit val basetableFormat = Json.format[basetable]
}

baseRepo.scala

代码语言:javascript
复制
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
  )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51486609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档