Spring认证中国教育管理中心-Spring Data MongoDB教程
发布于 3 年前 作者 xiangtao 2396 次浏览 来自 分享

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

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

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

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

  1. 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 项目:

转到 File → New → Spring Template Project → Simple Spring Utility Project,然后在出现提示时按 Yes。然后输入项目和包名称,例如org.spring.mongodb.example.
将以下内容添加到 pom.xml 文件dependencies元素:
<dependencies> <!-- other dependency elements omitted --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>3.2.6</version> </dependency> </dependencies>

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

  1. 将 pom.xml 中 Spring 的版本改为<spring.framework.version>5.3.11</spring.framework.version>

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

<repositories> <repository> <id>spring-milestone</id> <name>Spring Maven MILESTONE Repository</name> <url>https://repo.spring.io/libs-milestone</url> </repository> </repositories>

存储库也可在此处浏览。

您可能还希望将日志记录级别设置为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 + “]”; } }

Spring认证中国教育管理中心-Spring Data MongoDB教程
您还需要一个主应用程序来运行:

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”); } }

Spring认证中国教育管理中心-Spring Data MongoDB教程
运行主程序时,前面的示例会产生以下输出:

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 { /* * Use the standard Mongo driver API to create a com.mongodb.client.MongoClient instance. */ public @Bean MongoClient mongoClient() { return MongoClients.create(“mongodb://localhost:27017”); } }

Spring认证中国教育管理中心-Spring Data MongoDB教程
这种方法允许您使用标准
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 { /* * Factory bean that creates the com.mongodb.client.MongoClient instance */ public @Bean MongoClientFactoryBean mongo() { MongoClientFactoryBean mongo = new MongoClientFactoryBean(); mongo.setHost(“localhost”); return mongo; } }

Spring认证中国教育管理中心-Spring Data MongoDB教程
要访问
com.mongodb.client.MongoClient由MongoClientFactoryBean其他@Configuration类或您自己的类创建的对象,请使用private @Autowired MongoClient mongoClient;字段。

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

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

示例 58.配置 MongoDB 的 XML 模式

<?xml version=“1.0” encoding=“UTF-8”?> <beans xmlns=“http://www.springframework.org/schema/beans” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:mongo=“http://www.springframework.org/schema/data/mongo” xsi:schemaLocation= " http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Default bean name is ‘mongo’ --> <mongo:mongo-client host=“localhost” port=“27017”/> </beans>

Spring认证中国教育管理中心-Spring Data MongoDB教程
以下示例显示了更高级的配置MongoClientSettings(请注意,这些不是推荐值):

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

<beans> <mongo:mongo-client host=“localhost” port=“27017”> <mongo:client-settings connection-pool-max-connection-life-time=“10” connection-pool-min-size=“10” connection-pool-max-size=“20” connection-pool-maintenance-frequency=“10” connection-pool-maintenance-initial-delay=“11” connection-pool-max-connection-idle-time=“30” connection-pool-max-wait-time=“15” /> </mongo:mongo-client> </beans>

Spring认证中国教育管理中心-Spring Data MongoDB教程
以下示例显示了使用副本集的配置:

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

<mongo:mongo-client id=“replicaSetMongo” replica-set=“rs0”> <mongo:client-settings cluster-hosts=“127.0.0.1:27017,localhost:27018” /> </mongo:mongo-client>

回到顶部