0
下面的代碼是演示DAO類的PlaySlick示例。我用它作爲示例,但是我的問題是我在多個DAO中使用同一個表(例如,CatTable
類),並且由於該表是內部類,因此我無法將其導入其他DAO中,因爲它不是在伴侶對象中。有沒有辦法來解決這個問題?在PlaySlick中導出滑動表DAO
package dao
import scala.concurrent.Future
import javax.inject.Inject
import models.Cat
import play.api.db.slick.DatabaseConfigProvider
import play.api.db.slick.HasDatabaseConfigProvider
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import slick.driver.JdbcProfile
class CatDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
private val Cats = TableQuery[CatsTable]
def all(): Future[Seq[Cat]] = db.run(Cats.result)
def insert(cat: Cat): Future[Unit] = db.run(Cats += cat).map { _ =>() }
private class CatsTable(tag: Tag) extends Table[Cat](tag, "CAT") {
def name = column[String]("NAME", O.PrimaryKey)
def color = column[String]("COLOR")
def * = (name, color) <> (Cat.tupled, Cat.unapply _)
}
}
謝謝,但我仍然有問題。我有兩種選擇:在DAO之外聲明表定義(在這種情況下,我不知道如何導入api)或以某種方式訪問內部類。我更喜歡第一種方法,但如何導入api?如果你看一下,導入是INSIDE類,這就是我無法獨立定義表定義的原因。順便說一下,這段代碼取自PlaySlick的例子,如果最好使用DBIO,那麼他們應該更新它。 – ps0604
[Here](https://github.com/playframework/play-slick/blob/master/samples/computer-database/app/dao/CompaniesDAO.scala)我有另一個在PlaySlick中聲明表格定義的例子。由於它屬於特質,因此我不能在不同的DAO中使用它,因爲特質是隱藏的。 – ps0604
好吧......這很簡單:只需導入你需要的東西,就像這裏:https://gist.github.com/pdolega/359797842c4f15cfb35b10a2be8d2e39(見第9行導入:'import slick.jdbc.H2Profile.api._'? )。 我再說一遍 - 沒有人強迫你將表定義放入內部類或特質或其他內容中。這真是人爲的問題 - 把它放在適合你的地方。至於例子 - 他們保持這種方式,因爲它是最簡單的事情(把所有的東西放在一個班級/特質中完成)。 –