[英]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.