繁体   English   中英

什么是 Scala Slick 模式特征中的“覆盖 def *”

[英]What is 'override def *' in Scala Slick schema trait

case class Fruit(
                     apple: String,
                     banana: String
                   )


trait AppleComponent { self: HasDatabaseConfig[JdbcProfile] =>
  import profile.api._

  class Fruits(tag: Tag) extends Table[Fruit](tag, "fruits") {
    def apple      = column[String]("apple")
    def banana     = column[String]("banana")
    // what is this line of code used for?
    override def *    = (apple,banana) <> (Fruit.tupled, Fruit.unapply)
    def applePK = primaryKey("apple", apple)
  }

  protected lazy val Apples = TableQuery[Fruits]

}

我是Scala Slick 的新手,所以我想知道override def * = (apple,banana) <> (Fruit.tupled, Fruit.unapply)是什么意思? 我真的找不到任何关于它的文件。 另外,为什么我们需要一个特质?

Table类有*方法,该方法应该实现SELECT * FROM ...语义。 由于 Slick 无法猜测您想如何提取列,因此您必须手动编写(按您想要的顺序使用所有列)。

<>只是为了让你有一个由*而不是元组返回的案例类。

你在这里不需要trait 这个:

// module name
trait AppleComponent {
  // self-type for dependency injection
  self: HasDatabaseConfig[JdbcProfile] =>

  // dependencies injected by mixing-in this trait:

  protected lazy val Apples = TableQuery[Fruits]
}

被称为蛋糕图案。 一般来说,它是一种反模式(但 ZIO 最近推广了一种使用它的特定方式)。

我想说您使用的任何文档或教程都已经过时了几年。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM