Spring Data MongoDB 教程

MongoTemplate 简介

本章节将简单介绍 Spring Data MongoDB 中的一个核心MongoTemplate,我们的大部分工作均是通过该类完成,如:创建、更新和删除文档等等。

MongoTemplate 类位于 org.springframework.data.mongodb.core 包中,是 Spring 支持 MongoDB 的中心类,为与 MongoDB 数据库交互提供了丰富的功能集。该模板提供了创建、更新、删除和查询 MongoDB 文档的便利操作,并提供了你的领域对象(POJO)和 MongoDB 文档之间的映射。

注意:MongoTemplate 是线程安全的,一旦配置好就可以在多个实例中重复使用(多线程环境中)。

MongoDB 文档和领域对象(POJO)之间的映射是通过委托给 MongoConverter 接口的实现来完成的。Spring 提供了 MappingMongoConverter,但你也可以编写自己的转换器,后续章节将进行介绍。

MappingMongoConverter 类的声明:

public abstract class AbstractMongoConverter implements MongoConverter, InitializingBean {}
public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware {}

MongoTemplate 类实现了 MongoOperations 接口。在尽可能多的情况下,MongoOperations 上的方法是以 MongoDB 驱动 Collection 对象上的方法命名的,以使习惯于 MongoDB 驱动 API 的现有 MongoDB 开发者快速熟悉该 API。例如,你可以找到诸如查找、查找和修改、查找和替换、查找一个、插入、删除、保存、更新和更新多个等方法。

MongoTemplate 设计目标是使其尽可能容易地在使用基础 MongoDB 驱动和 MongoOperations 之间进行过渡。这两个 API 之间的一个主要区别是,MongoOperations 可以被传递领域对象而不是文档(Document)。另外,MongoOperations 对查询、条件(Criteria)和更新操作有更为流畅的 API,而不是通过填充 Document 来指定这些操作的参数。

注意:引用 MongoTemplate 实例上的操作的首选方式是通过其接口 MongoOperations。

MongoTemplate 使用的默认转换器实现是 MappingMongoConverter。虽然 MappingMongoConverter 可以使用额外的元数据来指定对象到文档的映射,但它也可以通过使用一些约定来转换不包含额外元数据的对象,以实现 ID 和集合名称的映射。关于如何使用注解进行映射在后续章节中将详细介绍。

MongoTemplate 的另一个核心功能是将 MongoDB Java 驱动抛出的异常转换为 Spring 的可移植数据访问异常层次结构(DataAccessException)。

MongoTemplate 提供了许多方便的方法,以帮助我们轻松执行常见任务。然而,如果你需要直接访问基础 MongoDB 驱动程序 API,你可以使用几个 execute 回调方法中的一个。执行回调将传递一个 com.mongodb.client.MongoCollectioncom.mongodb.client.MongoDatabase 对象的引用,使用该对象引用就好。execute 方法定义如下:

public <T> T execute(DbCallback<T> action);
public <T> T execute(Class<?> entityClass, CollectionCallback<T> callback);
public <T> T execute(String collectionName, CollectionCallback<T> callback);

DbCallback.java 定义如下:

public interface DbCallback<T> {
    /**
     * @param db must not be {@literal null}.
     * @return can be {@literal null}.
     * @throws MongoException
     * @throws DataAccessException
     */
    @Nullable
    T doInDB(MongoDatabase db) throws MongoException, DataAccessException;
}

CollectionCallback.java 定义如下:

public interface CollectionCallback<T> {

    /**
     * @param collection never {@literal null}.
     * @return can be {@literal null}.
     * @throws MongoException
     * @throws DataAccessException
     */
    @Nullable
    T doInCollection(MongoCollection<Document> collection) throws MongoException, DataAccessException;
}
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号