如果您在Play應用程序中使用Anorm,那麼映射到case類的Json對象(假設它有相當正常的apply和unapply函數,大多數情況下都是這樣定義的),應該非常簡單作爲定義的隱含它使用> 2.10宏觀基於JSON的方法開始......所以你真正需要的是這樣一個定義:
implicit val myCaseFormats = Json.format[MyCaseClass]
其中「MyCaseClass」是你的案件類型的名稱。你甚至可以將它用於解析器組合器,用於從數據庫中反序列化行集......這將大大地清理代碼並減少必須編寫的代碼量。
看到這裏的Json的宏細節: https://www.playframework.com/documentation/2.1.1/ScalaJsonInception
我在一個相當大的代碼庫使用相當廣泛,它確實使事情挺乾淨的。
在你的解析器ANORM而言,記住,你不有生產的情況下,類實例作爲一個分析的結果......你其實可以返回任何你喜歡的,這可能僅僅是一個您的列值的索引序列(如果您使用類似Shapeless的方法來允許混合類型列表等)或其他結構。
你做甲肝你的case類在ANORM宏支持,以及這樣的解析器可以是一個套這樣的:
import norm.{Macro, Rowset}
val parser = Macro.namedParser[MyCaseClass]
如果你想要做的事的習慣,(如解析直接向JsValue這樣),那麼你就可以靈活地手工製作更狡猾的解析器。
HTH
你錯過ANORM與ORM之間的真正區別:ORM動態生成查詢,根據映射descriptors.With ANORM,你做的查詢,正如你所知道的最好的數據庫,它僅提供了方便快捷,效果分析。 – cchantep