[英]How can I map a Row to a class using Anorm?
我有一个 class User
:
case class User (id: Int, name: String)
我想 map 使用异常 Stream API查询的行。 我试过这段代码:
val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
user => User(0, user.name)
).toList
但我收到一个错误:
Error raised is : value name is not a member of play.db.anorm.SqlRow
上
user => User(0, user.↓name)
如何将 map SqlRow
转换为 class?
正如里卡多所建议的,我尝试了:
object User extends Magic[User]
val users: List[User] = SQL("SELECT * FROM users").as(User*)
但是使用这段代码,我得到了一个RuntimeException occured: ColumnNotFound(User.id)
on:
val users: List[User] = SQL("SELECT * FROM users").as(User*)
有什么建议么? 我之前应该有User
object 吗? 我还有我的case class User
。
您可以使用魔术助手,创建一个扩展魔术的 object:
object User extends Magic[User]
然后:
val users:List[User] = SQL("select * from User").as(User*)
有关更多信息,请参阅文档: 魔术助手
我得到了它的工作:
val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
user => new User(user[Int]("id"), user[String]("name"))
).toList
每个行user
都是一本字典。 我不太了解 Scala 语法。
为了使其更具可扩展性,您可以这样做。
创建一个val
和 map 将传入数据发送给用户。
import {classname}
val parsedValueOfUser = {
get[Int]("id") ~
get[String]("name") map {
case id ~ name => User(id, name)
}
}
现在,当您想从数据库中获取用户并将 map 获取给您的用户 class 时,您可以执行以下操作:
val selectUsers = SQL("SELECT id, name FROM users").as(parsedValueOfUser *)
我遇到了这个确切的问题并花了我一段时间来找出问题所在。 结果是 model 并且数据库名称必须相同,区分大小写。
因此,对于您的示例,您的数据库表需要被称为“用户”
您可以使用以下方法更改数据库表名: RENAME TABLE users TO User;
希望有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.