gpt4 book ai didi

java - Scala + Casbah 对象映射良好实践

转载 作者:行者123 更新时间:2023-12-02 04:23:23 29 4
gpt4 key购买 nike

我希望使用 Scala 2.9.x 和 Casbah 实现我的 DAO 访问层。鉴于我的实体是一个带有参数的案例类:

case class Price (Id: Option[String], Price: Double, ItemName: String)

我的 BSON 文档如下所示:

{
"_id" : ObjectId("55dd1874b46f7178c8ddb737"),
"ItemName" : "Beet",
"Price" : "6"
}

我尝试创建一个属性

  override var prices: List[Price] =
db("prices").find.toList.map(
o => Price(Some(o("_id").toString),
o("Price").toString.toDouble,
o.getAs[String]("ItemName").get ))

这是我主要关心的问题: 1. 映射字段看起来有点麻烦,应该有一些自动化。我知道我可以使用 import net.liftweb.json.{DefaultFormats, Serialization} 或任何其他解析器,但我很确定应该有与 Casbah 更密切相关的东西。可能是其他一些 MongoDB Scala ORM。 2. 我不喜欢将其放入 var 的想法。公开数据的更好方法是什么?我应该使用属性(property)吗?3.实体的最佳实践是什么(正如你所看到的,我使用带有参数的案例类,没有任何主体)

最佳答案

我为此使用 Salat:https://github.com/salat/salat/wiki/Quick-start

为了保存,您可以使用 asDBObject 来转换案例类。

val testCaseClass = new TestCaseClass(null, "testName", 30, addressList)
collection.save(grater[TestCaseClass].asDBObject(testCaseClass))

要获取,请使用 asObject 代替

val savedCaseClass=grater[TestCaseClass].asObject(collection.findOne().get)

这是案例类的定义

class TestCaseClass(_id:ObjectId, name:String, age:Int, address:List[AddressCase])

关于java - Scala + Casbah 对象映射良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491144/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com