如何使用 Anorm 将行映射到类?
我有一个类 User
:
case class User (id: Int, name: String)
我想使用 Anorm 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)
如何将 SqlRow
映射到类?
按照里卡多的建议,我尝试了:
object User extends Magic[User]
val users: List[User] = SQL("SELECT * FROM users").as(User*)
但是使用这段代码我得到了一个 RuntimeException 发生:ColumnNotFound(User.id)
on:
val users: List[User] = SQL("SELECT * FROM users").as(User*)
有什么建议吗?我是否应该在前面的行中包含 User
对象?我仍然有我的案例类用户
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 Magic 助手,创建一个扩展 magic 的对象:
然后:
请参阅文档以获取更多信息: 魔法帮手
You can use Magic helper, create a object that extends magic :
Then :
See the doc for more information : Magic helper
我得到了它的工作原理:
每一行
user
都是一本字典。我不太了解 Scala 语法。I got it working with this:
Every row
user
is a dictionary. I don't know the Scala syntax very well.为了使其更具可扩展性,您可以这样做。
创建一个
val
并将传入数据映射到用户。现在,当您想从数据库获取用户并将其映射到您的 User 类时,您可以执行以下操作:
To make it a bit more scalable you could do this.
Create a
val
and map the incoming data to a user.Now when you want to get a user from the database and map it to your User class you can do:
我遇到了这个确切的问题,并花了我一段时间才找出问题所在。原来是模型和数据库名称必须相同,区分大小写。
因此,对于您的示例,您的数据库表需要称为“用户”
您可以使用以下命令更改数据库表名称:
将表用户重命名为用户;希望
有帮助。
I ran into this exact issue and took me awhile to finger out what was wrong. It turned out to be the model and database names have to be the same, case-sensitive.
So for your example your database table would need to be called "User"
You can change a database table name using:
RENAME TABLE users TO User ;
Hope that helps.