【问题标题】:Scala + Casbah object mapping good practicesScala + Casbah 对象映射良好实践
【发布时间】:2015-12-06 02:34:02
【问题描述】:

我希望使用 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 中的想法。公开数据的更好方法是什么?我应该使用财产吗? 3. entites 的最佳实践是什么(如您所见,我使用带有参数的案例类,没有任何主体)

【问题讨论】:

    标签: java mongodb scala casbah


    【解决方案1】:

    我为此使用 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)
    

    这里是case类的定义

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

    【讨论】:

    • 试一试 Salat,现在我遇到了另一个错误:case class Sale (@Key("_id") Id: Option[String], Date: Date, SaleDetails: List[SaleDetail]) 我的 json:{ "_id" : ObjectId("55f13d293aab21313e576d34"), "Date" : "2015-06-24T22:22:33.875Z", "SaleDetails" : [ { "ItemName" : "Carrots", "Price" : 1.6000000000000001, "Units" : 9 } ] } 我正在尝试阅读销售:override var sales: List[Sale] = db("sales").find.toList.map( obj => grater[Sale].asObject(obj)) 一个错误:参数类型不匹配
    • 我总是使用 ObjectId 类型作为案例类的 _id 字段。这是我的 testCaseClass 的定义case class TestCaseClass(_id:ObjectId, name:String, age:Int, address:List[AddressCase])
    • 对模型使用 ObjectId 使此类 MongoDB 成为特定的 MongoDB,因为我不希望我的业务和/或 UI 层了解持久性的细节。
    • 可以改用 UUID,查看 Salat 的这个测试用例,了解如何使用它:github.com/salat/salat/blob/master/salat-core/src/test/scala/…
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多