日期:2014-05-16  浏览次数:20858 次

使用 Morphia 和 MongoDB 实现域模型持久性(ZZ)

?

使用 Morphia 持久保存、加载、删除和查询映射到 MongoDB 的 Java 域模型


简介:?MongoDB 是面向文档的开源数据库,Morphia 是面向 MongoDB 的类型安全的对象映射库。本文解释了在文档和对象之间进行映射的好处,并演示了如何使用 Morphia 来实现这个功能。然后演示了如何持久保存、加载、删除和查询映射到 MongoDB 的 Java? 域模型。

文章中对于 MongoDB 术语的翻译为:

  • Collection:集合
  • Document:文档

MongoDB 是面向文档的数据库,用于存储并检索类似 JavaScript 对象符号(JavaScript Object Notation,JSON)的文档。由于索引、复制和分片功能的增强,MongoDB 已成为强大的、可扩展的 NoSQL 竞争者(参见?参考资料)。

?

官方 Java 驱动程序可用于与 MongoDB 交互。该驱动程序提供?Map?的实现?BasicDBObject,用于在数据存储中表示文档。虽然?Map?表示法很方便,尤其是在读对 JSON 序列化和反序列化时,但是能够将文档表示为 Java 类层次也具有其优点。例如,反复从 Java 域模型映射文档,允许您在 Java 层上强行执行类型安全,同时通过 MongoDB 享受无模式(schema)开发的好处。

Morphia 是基于 Apache 许可证的 Google Code 项目,让您在 MongoDB 上持久保存、检索、删除和查询作为文档存储的 POJO。通过提供一系列围绕 Mongo Java 驱动程序的注释和包装程序,Morphia 完成了这些操作。Morphia 概念上类似于对象关系映射器(ORM),如 Java Persistence API (JPA) 或 Java 数据对象(Java Data Objects,JDO)实现。在本文中,我将演示如何对映射到 MongoDB 的 Java 域模型使用 Morphia。参见?下载?部分获取完整的样例代码。

定义域模型

我将使用简化的域模型来演示 Morphia 的功能。BandManager(假想的 web 应用程序)提供有关音乐活动的数据:其成员、经销商、目录、类型等等。我将定义?BandSongDistributor?和?ContactInfo?类来表示此域模型,如图 1 所示:


图 1. BandManager 的类
针对 BandManager 应用程序的域模型类层次的 UML 图表?

图 1?中的统一建模语言(Unified Mo