Spring认证中国教育管理中心-Spring Data MongoDB教程

Spring认证中国教育管理中心-Spring Data MongoDB教程,第1张

Spring认证中国教育管理中心-Spring Data MongoDB教程

原标题:Spring Data MongoDB参考文档(内容来源:Spring中国教育管理中心)

参考文档的这一部分解释了 Spring Data MongoDB 提供的核心功能。

“ MongoDB 支持”介绍了 MongoDB 模块功能集。

“ MongoDB Repositories ”介绍了对 MongoDB 的存储库支持。

11. MongoDB 支持

MongoDB 支持包含广泛的功能:

  • Spring 配置支持使用基于 Java 的@Configuration类或用于 Mongo 驱动程序实例和副本集的 XML 命名空间。
  • MongoTemplate 在执行常见的 Mongo *** 作时提高生产力的助手类。包括文档和 POJO 之间的集成对象映射。
  • 异常转换为 Spring 的可移植数据访问异常层次结构。
  • 功能丰富的对象映射与 Spring 的转换服务集成。
  • 基于注释的映射元数据可扩展以支持其他元数据格式。
  • 持久性和映射生命周期事件。
  • 基于 Java 的查询、标准和更新 DSL。
  • 存储库接口的自动实现,包括对自定义查找器方法的支持。
  • QueryDSL 集成以支持类型安全查询。
  • 对 JPA 实体的跨存储持久性支持,其字段透明地持久化并使用 MongoDB 检索(不推荐使用 - 将被删除而不替换)。
  • 地理空间整合。

对于大多数任务,您应该使用MongoTemplate或 Repository 支持,它们都利用了丰富的映射功能。MongoTemplate是寻找访问功能的地方,例如递增计数器或临时 CRUD *** 作。MongoTemplate还提供了回调方法,以便您可以轻松获取低级 API 工件,例如
com.mongodb.client.MongoDatabase直接与 MongoDB 通信。各种 API 工件的命名约定的目标是复制基础 MongoDB Java 驱动程序中的命名约定,以便您可以轻松地将现有知识映射到 Spring API。

11.1.入门

引导设置工作环境的一种简单方法是在STS 中创建一个基于 Spring 的项目。

首先,您需要设置一个正在运行的 MongoDB 服务器。有关如何启动 MongoDB 实例的说明,请参阅MongoDB 快速入门指南。安装后,启动 MongoDB 通常只需运行以下命令:${MONGO_HOME}/bin/mongod

在 STS 中创建 Spring 项目:

  1. 转到 File → New → Spring Template Project → Simple Spring Utility Project,然后在出现提示时按 Yes。然后输入项目和包名称,例如org.spring.mongodb.example.
  2. 将以下内容添加到 pom.xml 文件dependencies元素:

   org.springframework.data spring-data-mongodb 3.2.6  

3. 将 pom.xml 中 Spring 的版本改为5.3.11

4.将 Maven 的 Spring Milestone 存储库的以下位置添加到您pom.xml的元素中,使其与您的元素处于同一级别:

  spring-milestone Spring Maven MILESTONE Repository https://repo.spring.io/libs-milestone  

存储库也可在此处浏览。

您可能还希望将日志记录级别设置为DEBUG以查看一些附加信息。为此,请编辑log4j.properties文件以具有以下内容:

log4j.category.org.springframework.data.mongodb=DEBUG log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n

然后你可以创建一个Person类来持久化:

package org.spring.mongodb.example; public class Person { private String id; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getId() { return id; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

您还需要一个主应用程序来运行:

package org.spring.mongodb.example; import static org.springframework.data.mongodb.core.query.Criteria.where; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; import com.mongodb.client.MongoClients; public class MongoApp { private static final Log log = LogFactory.getLog(MongoApp.class); public static void main(String[] args) throws Exception { MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "database"); mongoOps.insert(new Person("Joe", 34)); log.info(mongoOps.findOne(new Query(where("name").is("Joe")), Person.class)); mongoOps.dropCollection("person"); } }

运行主程序时,前面的示例会产生以下输出:

10:01:32,062 DEBUG apping.MongoPersistentEntityIndexCreator: 80 - Analyzing class class org.spring.example.Person for index information. 10:01:32,265 DEBUG ramework.data.mongodb.core.MongoTemplate: 631 - insert document containing fields: [_class, age, name] in collection: Person 10:01:32,765 DEBUG ramework.data.mongodb.core.MongoTemplate:1243 - findOne using query: { "name" : "Joe"} in db.collection: database.Person 10:01:32,953 INFO org.spring.mongodb.example.MongoApp: 25 - Person [id=4ddbba3c0be56b7e1b210166, name=Joe, age=34] 10:01:32,984 DEBUG ramework.data.mongodb.core.MongoTemplate: 375 - Dropped collection [database.person]

即使在这个简单的例子中,也有几件事需要注意:

  • 您可以MongoTemplate通过使用标准com.mongodb.client.MongoClient对象和要使用的数据库名称来实例化 Spring Mongo 的中央帮助器类。
  • 映射器针对标准 POJO 对象工作,无需任何额外的元数据(尽管您可以选择提供该信息。请参阅此处。)。
  • 约定用于处理id字段,将其转换为ObjectId存储在数据库中的时间。
  • 映射约定可以使用字段访问。请注意,Person该类只有 getter。
  • 如果构造函数参数名称与存储文档的字段名称匹配,则它们用于实例化对象
11.2.示例库

有一个包含多个示例的GitHub 存储库,您可以下载并试用这些示例,以了解该库的工作原理。

11.3.使用 Spring 连接到 MongoDB

使用 MongoDB 和 Spring 时的首要任务之一是
com.mongodb.client.MongoClient使用 IoC 容器创建对象。有两种主要方法可以做到这一点,一种是使用基于 Java 的 bean 元数据,另一种是使用基于 XML 的 bean 元数据。以下各节将讨论两者。

对于那些不熟悉如何配置使用基于Java bean的元数据,而不是基于XML的元数据Spring容器,请参阅参考文档的高级介绍这里还有详细的文档在这里。

11.3.1.使用基于 Java 的元数据注册 Mongo 实例

以下示例显示了使用基于 Java 的 bean 元数据注册 a 实例的示例
com.mongodb.client.MongoClient:

示例
56.com.mongodb.client.MongoClient使用基于 Java 的 bean 元数据注册对象

@Configuration public class AppConfig {  public @Bean MongoClient mongoClient() { return MongoClients.create("mongodb://localhost:27017"); } }

这种方法允许您使用标准
com.mongodb.client.MongoClient实例,容器使用 Spring 的MongoClientFactoryBean. 与com.mongodb.client.MongoClient直接实例化实例FactoryBean相比,它还为容器提供了一个ExceptionTranslator实现,该实现将 MongoDB 异常转换为 Spring 的可移植DataAccessException层次结构中的异常,用于使用注释注释的数据访问类@Repository。Spring 的 DAO 支持特性中@Repository描述了这种层次结构和使用。

以下示例显示了一个基于 Java 的 bean 元数据的示例,该元数据支持对带@Repository注释的类进行异常转换:

示例
57.com.mongodb.client.MongoClient使用 Spring注册对象MongoClientFactoryBean并启用 Spring 的异常转换支持

@Configuration public class AppConfig {  public @Bean MongoClientFactoryBean mongo() { MongoClientFactoryBean mongo = new MongoClientFactoryBean(); mongo.setHost("localhost"); return mongo; } }

要访问
com.mongodb.client.MongoClient由MongoClientFactoryBean其他@Configuration类或您自己的类创建的对象,请使用private @Autowired MongoClient mongoClient;字段。

11.3.2.使用基于 XML 的元数据注册 Mongo 实例

虽然您可以使用 Spring 的传统XML 命名空间向
com.mongodb.client.MongoClient容器注册 的实例,但 XML 可能非常冗长,因为它是通用的。XML 命名空间是配置常用对象(例如 Mongo 实例)的更好替代方法。mongo 命名空间允许您创建 Mongo 实例服务器位置、副本集和选项。

要使用 Mongo 命名空间元素,您需要引用 Mongo 架构,如下所示:

示例 58.配置 MongoDB 的 XML 模式

    

以下示例显示了更高级的配置MongoClientSettings(请注意,这些不是推荐值):

示例 59.使用 XML 模式配置
com.mongodb.client.MongoClient对象MongoClientSettings

    

以下示例显示了使用副本集的配置:

示例
60.com.mongodb.client.MongoClient使用副本集配置对象的XML 模式

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5438435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存