使用 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 应用程序)提供有关音乐活动的数据:其成员、经销商、目录、类型等等。我将定义?Band
、Song
、Distributor
?和?ContactInfo
?类来表示此域模型,如图 1 所示:
图 1. BandManager 的类
?
图 1?中的统一建模语言(Unified Mo