如何使用Anorm将行映射到类?

Jon*_*nas 5 scala map stream playframework anorm

我有一节课User:

case class User (id: Int, name: String)
Run Code Online (Sandbox Code Playgroud)

我想使用Anorm Stream API映射查询中的行.我尝试过这段代码:

val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
    user => User(0, user.name)
).toList
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

Error raised is : value name is not a member of play.db.anorm.SqlRow
Run Code Online (Sandbox Code Playgroud)

user => User(0, user.?name)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它映射SqlRow到一个类?


正如里卡多所说,我试过:

object User extends Magic[User]

val users: List[User] = SQL("SELECT * FROM users").as(User*)
Run Code Online (Sandbox Code Playgroud)

但是通过这段代码,我得到了一个RuntimeException occured : ColumnNotFound(User.id):

val users: List[User] = SQL("SELECT * FROM users").as(User*)
Run Code Online (Sandbox Code Playgroud)

有什么建议?我是否想要让User对象在线之前?我还有我的case class User.

Jon*_*nas 4

我用这个工作了:

val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
    user => new User(user[Int]("id"), user[String]("name"))
).toList
Run Code Online (Sandbox Code Playgroud)

每一行user都是一本字典。我不太了解 Scala 语法。