通过 Morphia ODM 和 Amazon DocumentDB 加速应用程序开发 数据库博客

使用 Morphia ODM 和 Amazon DocumentDB 加速应用开发

关键要点

在本文中,我们讨论如何使用 Morphia ODM 和 Amazon DocumentDB 开发应用程序。Morphia 的对象文档映射功能为开发人员提供了巨大的生产力提升,简化了与 Amazon DocumentDB 的交互,避免了低级 API 的复杂性,允许开发者将注意力集中在核心业务逻辑上。

Morphia 的对象文档映射功能为 Amazon DocumentDB (与 MongoDB 兼容) 开发者带来了巨大的生产力提升,使应用开发更快速、代码更加简洁,极大地减少了通常与持久数据访问相关的样板代码和复杂性。Morphia 处理了 Java 对象与 Amazon DocumentDB 文档之间的双向映射,自动化透明的持久化操作。这样,开发人员可以直接与熟悉的 Java 结构进行交互,无需处理基于 JSON 的结构和查询语法。结果是节省了时间,减少了代码行数,并且对现有对象模型的侵入性更小,提升了在功能迭代方面的敏捷性。

Amazon DocumentDB 是一个可扩展、高耐用性且完全管理的数据库服务,适用于企业操作关键的 JSON 工作负载。Amazon DocumentDB 通过提供内置的安全最佳实践、持续备份和与其他 AWS 服务的原生集成,简化了架构。Morphia 是一个开源 Java 开发者的对象文档映射工具ODM,为将 Java 对象映射到 Amazon DocumentDB 文档提供了便捷的方法。

在这篇文章中,我们将讨论如何使用 Morphia ODM 与 Amazon DocumentDB 开发应用程序。此外,集成步骤将强调如何通过自动化对象文档映射使 Morphia 在后台流畅地与 Amazon DocumentDB 协同工作。

解决方案概述

Morphia 是一个构建在 Java 驱动程序之上的 ODM 库。ODM 是一种编程技术,用于促进面向对象编程语言如 Java与文档导向数据库如 Amazon DocumentDB 和 MongoDB之间的交互,这些数据库以灵活的、无模式的方式存储数据。Morphia 提供了一种方法,将 Java 对象映射到 Amazon DocumentDB 文档,反之亦然。这意味着您可以使用 Java 对象及其对应的方法与 Amazon DocumentDB 进行交互,而无需直接处理低级 JSON 查询和文档。

以下图示展示了解决方案架构。

前提条件

要完成此配置,您需要以下内容:

一个 Amazon DocumentDB 集群。您可以使用 Morphia ODM 库将您的 Amazon DocumentDB 集群与 Java 应用程序集成。若您尚未拥有 Amazon DocumentDB 集群,请参阅 开始使用 Amazon DocumentDB 创建一个新集群。安装 Java 17。安装 Maven。

请注意,您可能会因使用 Amazon DocumentDB 而产生相关费用。您可以使用 AWS 价格计算器 估算费用。

使用 Maven 创建 Morphia Java 项目

在您的 AWS Cloud9 环境中,通过选择 窗口 和 新建终端 启动一个新的终端窗口。要生成一个新的 Java 项目模板,请在终端窗口中运行以下命令:

bashmvn archetypegenerate DgroupId=comexamplemorphiadocdb DartifactId=morphiadocdbsample DarchetypeArtifactId=mavenarchetypequickstart DarchetypeVersion=14 DinteractiveMode=false

另外,您可以使用 GitHub repo 中的 docdbmorphiastarter 示例应用。

添加 Maven 依赖

您需要将 Morphia 添加到项目中。您可以从 Maven Central 下载 Morphia 的预构建 JAR 文件,并在 Java 项目中使用它们。

您也可以使用像 Maven 这样的依赖管理工具。将以下内容添加到您的 pomxml 文件的依赖部分:

xmlltdependencygt ltgroupIdgtdevmorphiamorphialt/groupIdgt ltartifactIdgtmorphiacorelt/artifactIdgt ltversiongt226lt/versiongtlt/dependencygt

Morphia 是一个包装器,使用 MongoDB Java 驱动程序 作为依赖。将以下 Java 驱动程序依赖项添加到您的 pomxml 文件中:

xmlltdependencygt ltgroupIdgtorgmongodblt/groupIdgt ltartifactIdgtmongodbdriversynclt/artifactIdgt ltversiongt482lt/versiongtlt/dependencygt

定义数据模型

Morphia 使用称为 entities 的模型,与集合中的文档相映射。它具有方便的注解语法,您可以使用它来定义这些模型并创建索引。

为了在 Amazon DocumentDB 数据库中存储和检索数据,我们来创建一个 POJO 模型或实体类。此实体代表 Amazon DocumentDB 中的一个集合,并使用注解来定义集合名称、属性、主键和索引。

通过 Morphia ODM 和 Amazon DocumentDB 加速应用程序开发 数据库博客

在此示例中,您创建一个 products 集合及其对应的模型对象,存储 catalog 数据库中产品的详细信息。您创建一个产品模型,具有六个属性:id、name、sku、description、inventory 和 category。

使用 @Entity 注解指示 Morphia 将以下类用作实体。默认情况下,Morphia 根据类的名称将实体映射到 Amazon DocumentDB 中的集合,但如果您想要覆盖此默认名称,可以在 @Entity 注解中添加名称。

在以下示例中,我们使用 @Entity(products) 指定集合名称为 products。

您可以使用 @Id 注解指定文档的主键 id。如果不指定任何内容,Amazon DocumentDB 在创建文档时会生成 id 字段。

其他字段保持无注解。默认情况下,Morphia 将 Entity 对象中的字段映射到 Amazon DocumentDB 集合中同名的属性,但您可以覆盖此设置。

在项目目录内,创建一个名为 Productjava 的新文件,路径包与 comexamplemorphiadocdbentities 匹配。将 Java 代码从 示例项目 复制到此新文件中。

使用 TLS 连接

要从基于 Java 的应用程序连接到启用 TLS 的 Amazon DocumentDB 集群,您的程序必须使用 AWS 提供的证书授权 CA 文件来验证连接。要使用 Amazon RDS CA 证书,请参阅 TLS 连接。

配置数据库和连接

要使用 Morphia 库与 Amazon DocumentDB 集群建立连接,您首先需要检索 Amazon 集群端点。完成以下步骤:

在 Amazon DocumentDB 控制台中,选择 集群。找到您的集群并选择区域集群标识符。在 连接和安全 选项卡中,复制用于与您的集群连接的命令。

请注意,您需要从复制的连接字符串中删除 amptlsCAFile=globalbundlepem。请确保您已经将 AWS 提供的 CA 文件导入信任库。现在您可以创建连接。

查找您的 Amazon DocumentDB 集群的连接字符串,并将其作为常量添加到 Appjava 类中。然后为要使用的数据库添加名称常量。作为最佳实践,您可以将这些常量外部化到外部配置文件中。

javastatic String docdburi = mongodb//ltuser namegtltpasswordgt@ltcluster endpointgtltport numbergt/tls=trueampreplicaSet=rs0ampreadPreference=secondaryPreferredampretryWrites=falsestatic String databasename = catalog

在配置好连接字符串后,下一步是设置密钥库属性,以建立安全连接。

在 Appjava 类中,通过设置以下系统属性在应用程序中使用密钥库:

javastatic String KEYSTORETYPE = /tmp/certs/rdstruststorejksstatic String DEFAULTKEYSTOREPASSWORD = lttruststorePasswordgtprivate static void setSslProperties() { SystemsetProperty(javaxnetssltrustStore KEYSTORETYPE) SystemsetProperty(javaxnetssltrustStorePassword DEFAULTKEYSTOREPASSWORD)}

连接字符串已配置,密钥库属性已设置。现在您可以使用 Morphia 连接到 Amazon DocumentDB 集群。

以下示例演示了如何初始化 Morphia 实例。然后,您可以使用此实例来配置实体映射。

在 Appjava 类中,添加以下代码以连接到 Amazon DocumentDB 数据库。在连接到数据库后,您还可以配置您创建的数据存储。

javapublic static void setUp() { // 设置密钥库以建立安全连接 setSslProperties() // 一个用于与 Amazon DocumentDB 建立连接的数据存储实例 datastore = MorphiacreateDatastore(MongoClientscreate(docdburi) databasename) // 指示 Morphia 在哪里查找实体类。以下行可以多次调用不同的包或类 datastoregetMapper()mapPackage(comexamplemorphiadocdb) datastoreensureIndexes()}

在上一步中定义的所有实体现在已映射到集合中的文档。

现在您的实体已映射到数据库中的集合,您可以开始与数据库交互。

使用 Morphia 执行 CRUD 操作

让我们使用 Morphia 库探讨基本的 CRUD创建、读取、更新、删除操作,并逐个测试这些操作。

保存或创建

首先,您可以使用 save 方法向集合添加几个文档。save 方法以 Product 对象作为输入,并在 Amazon DocumentDB 集合中保存产品文档。将以下代码片段添加到 Appjava 类中:

surfshark大陆版

javapublic static void saveProducts() { datastoresave(new Product(RayBan Sunglass Pro 1590234RayBan Sunglasses for professional sports people 100 fashion)) datastoresave(new Product(GUCCI Handbag 3451290 Fashion Hand bags for all ages 75 fashion)) datastoresave(new Product(Round hat 8976045 200 fashion)) datastoresave(new Product(Polo shirt 6497023 Cool shirts for hot summer 25 cloth)) datastoresave(new Product(Swim shorts 8245352 Designer swim shorts for athletes 200 cloth)) datastoresave(new Product(Running shoes 3243662 Shoes for work out and trekking 20 footware))}

读取

在此示例中,您执行两个读取操作。一个是根据名称查询产品,另一个是根据类别查找产品列表。

您将在 Appjava 类中添加两个简单的方法。第一个方法 findProductByName 根据 name 属性查询集合。第二个方法 findAllProductsByCategory 检索特定类别的所有文档,如下所示:

javapublic static Product findProductByName (String name) { Systemoutprintln(获取产品名称 name) Product product = datastorefind(Productclass)filter( Filterseq(name name))iterator(new FindOptions()limit(1)) tryNext() Systemoutprintln(product) return product}

public static List findAllProductsByCategory(String category) { List productList = datastorefind(Productclass)filter( Filterseq(category category))iterator()toList() Systemoutprintln(productList) return productList}

更新

您可以使用 update 或 modify 方法在 Query 实例上更新现有文档。这些更新操作在服务器上运行,而无需通过网络传输文档。更新操作使用 UpdateOperators 定义的一组函数。在此示例中,您根据 SKU 查询现有产品,并将库存增加 10。将以下方法添加到 Appjava 类中:

javapublic static void updateInventory(String sku) { Systemoutprintln(更新产品库存,SKU sku) final Product updatedProduct = datastorefind(Productclass) filter(Filterseq(sku sku)) modify(UpdateOperatorsinc(inventory 10)) execute(new ModifyOptions()returnDocument(ReturnDocumentAFTER)) Systemoutprintln(更新后的产品 updatedProduct)}

删除

在此示例中,您添加两个删除操作。首先,根据 SKU 删除一个产品。在第二个方法中,删除集合中的所有文档产品。将以下方法添加到 Appjava 类中:

javapublic static void deleteProduct(String sku) { datastorefind(Productclass) filter(Filterseq(sku sku)) delete(new DeleteOptions()multi(true)) Systemoutprintln(SKU 为 sku 的产品已删除)}

public static void deleteAll() { datastorefind(Productclass) delete(new DeleteOptions()multi(true)) Systemoutprintln(所有产品已删除。)}

运行和测试您的应用

现在,您可以在 Appjava 文件的主函数中调用前面部分定义的所有 CRUD 操作。有关主函数的完整实现,请参考我们的示例项目中的 Appjava 文件。此文件包含运行应用程序的最终可执行主方法。

使用如下 Maven 命令运行基于 Morphia 的示例应用:

bashmvn compile execjava DexecmainClass=comexamplemorphiadocdbApp DexeccleanupDaemonThreads=false

完成了!您已成功使用 Morphia ODM 库从 Java 应用程序连接到 Amazon DocumentDB。

清理

为避免持续产生费用,请按照以下步骤清理您的资源:

如果您创建了新的 Amazon DocumentDB 集群,删除集群。如果您使用的是现有的 Amazon DocumentDB 集群,请运行以下命令,从 mongo shell 中删除示例应用创建的数据库和集合:

bashuse catalogdbdropDatabase()

如果您创建了 AWS Cloud9 IDE,删除环境。

结论

在本文中,您了解了如何使用 Morphia 作为 Java 应用程序与 Amazon DocumentDB 交互的对象文档映射器。具体来说,您了解到 Morphia 提供了一个高级抽象层,消除了使用低级 Java 驱动 API 或编写复杂数据库访问代码的需要。通过使用 Morphia 库并遵循简单的配置步骤将 Java 对象映射到数据库文档,您可以将重点放在领域模型和业务逻辑上,而无需处理数据库的复杂性。

您可以在 GitHub上找到本文中使用的示例。如果您对本文有任何反馈,请在评论区与我们分享。

关于作者

Gururaj S Bayari 是 AWS 的高级 DocumentDB 专家解决方案架构师。他喜欢帮助客户采用亚马逊的定制数据库,帮助客户设计、评估及优化互联网规模和高性能的工作负载,这些工作负载由 NoSQL 或关系数据库驱动。

Anshu Vajpayee 是 AWS 的高级 DocumentDB 专家解决方案架构师。他一直帮助客户采用 NoSQL 数据库,并使用 Amazon DocumentDB 实现应用现代化。在加入 AWS 之前,他曾为大约 15 年的时间里广泛使用关系型和 NoSQL 数据库。

如何管理 AWS IoT Greengrass 核心设备证书 官方博客 物联网
< 上一篇

评论