Scala 仅使用类名字符串创建对象的实例。
我是scala的新手,我想边走边想办法。我正在使用Play2.x框架,并使用Scala构建我的应用程序。我已经确定了路线Scala 仅使用类名字符串创建对象的实例。,scala,playframework-2.0,slick,Scala,Playframework 2.0,Slick,我是scala的新手,我想边走边想办法。我正在使用Play2.x框架,并使用Scala构建我的应用程序。我已经确定了路线 GET /:tableName controllers.Application.getTable(tableName) 在控制器中,我希望使用表的名称,并像使用类一样使用它。例如,在db if中,有一个名为People的表。我希望它映射到具有getAll函数的用户的光滑模型。我研究了t型,但没能使它工作。下面是我想做的一个例子 def getTable(tableNam
GET /:tableName controllers.Application.getTable(tableName)
在控制器中,我希望使用表的名称,并像使用类一样使用它。例如,在db if中,有一个名为People的表。我希望它映射到具有getAll函数的用户的光滑模型。我研究了t型,但没能使它工作。下面是我想做的一个例子
def getTable(tableName: String) = Action {
Ok(Json.toJson(typeOf[tableName].getAll))
}
要完成这项任务,您需要的不仅仅是这些;)首先,Slick需要一个DB会话,因此需要在某个地方进行处理。这意味着一个光滑的表
getAll
本身无法工作
我会这样做(抱歉,在没有IDE的情况下键入此项,因此它可能无法编译):
我有一个模型,看起来和你上面的相似。问题是我有几个定义了.getAll的模型。我希望使用字符串传入对象的名称,并调用.getAll以获得适当的方法。您能否将
.getAll
概括为DAO
所具有的特征?
case class Person(...)
object People extends Table[Person](PeopleDAO.table) {
def * = ...
}
trait DAO[T] {
val table: String
def getAll: Seq[T]
}
object PeopleDAO extends DAO[Person] {
override val table = "people"
def getAll = {
DB withSession { implicit session =>
Query(People).list
}
}
}
object Controller {
def getTable(tableName: String) = Action {
val dao: DAO[_] = tableName.toLowerCase match {
case PeopleDAO.table => PeopleDAO
case _ => throw new IllegalArgumentException("Not a valid table.")
}
Ok(Json.toJson(dao.getAll))
}
}