Spring Data MongoDB 教程

MongoTemplate 实例化

本章节将介绍怎样基于 Java 或者 XML 方式去实例化 MongoTemplate。

基于 Java 实例化 MongoTemplate

我们先看看 MongoTemplate 的构造方法,它有几个重载的构造函数,如下:

  • MongoTemplate(MongoClient mongo, String databaseName) 根据 MongoClient 对象和要对其进行操作的默认数据库名称去实例化 MongoTemplate。

  • MongoTemplate(MongoDatabaseFactory mongoDbFactory) 根据 MongoDatabaseFactory 对象实例化 MongoTemplate,MongoDatabaseFactory 封装了 MongoClient 对象、数据库名称、用户名和密码等信息。

  • MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter) 传递了一个用于对象和文档映射的 MongoConverter 接口实现去实例化 MongoTemplate。

下面通过第一个构造方法去初始化 MongoTemplate,如下:

package com.hxstrive.springdata.mongodb.config;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

/**
 * 配置实例化 MongoTemplate
 * @author hxstrive.com 2022/12/23
 */
@Configuration
public class AppConfig {

    @Bean
    public MongoClient mongoClient() {
        // 创建连接到本地的 MongoClient 对象
        return MongoClients.create("mongodb://localhost:27017");
    }

    @Bean
    public MongoTemplate mongoTemplate(MongoClient mongoClient) {
        // 创建链接到本地 test 数据库的 MongoTemplate 实例
        return new MongoTemplate(mongoClient, "test");
    }

}

创建一个客户端,使用 MongoTemplate 实现简单的 CRUD 操作,代码如下:

package com.hxstrive.springdata.mongodb;

import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

/**
 * 客户端
 * @author hxstrive.com 2022/12/23
 */
@SpringBootTest
public class AppConfigTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    public void contextLoads() {
        // 保存数据
        User newUser = User.builder().id(1000).name("Tom").build();
        mongoTemplate.save(newUser);
        User result = mongoTemplate.findOne(new Query(Criteria.where("id").is(1000)), User.class);
        System.out.println(result);

        // 修改数据
        mongoTemplate.updateFirst(new Query(Criteria.where("id").is(1000)),
                Update.update("name", "Helen"), User.class);
        result = mongoTemplate.findOne(new Query(Criteria.where("id").is(1000)), User.class);
        System.out.println(result);

        // 删除数据
        mongoTemplate.remove(new Query(Criteria.where("id").is(1000)), User.class);
    }

    @Data
    @Builder
    @ToString
    static class User {
        private int id;
        private String name;
    }

}

运行客户端,输出如下:

AppConfigTest.User(id=1000, name=Tom)
AppConfigTest.User(id=1000, name=Helen)

基于 XML 实例化 MongoTemplate

上面介绍了通过 Java 实例化 MongoTemplate,接下来介绍一下通过 XML 实例化 MongoTemplate,如下:

(1)创建 resources/META-INF/applicationContext.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/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/data/mongo
            http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">

    <mongo:mongo-client id="mongoClient" host="localhost" port="27017"/>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoClient"/>
        <constructor-arg name="databaseName" value="test"/>
    </bean>

</beans>

(2)修改入口类,通过 @ImportResource 注解载入上面的 XML 配置。

package com.hxstrive.springdata.mongodb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(locations = {"classpath*:META-INF/applicationContext.xml"})
public class SpringdataMongodbDemo2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringdataMongodbDemo2Application.class, args);
    }

}

(3)编写客户端验证,继续使用上面基于 Java 实例化的客户端程序 “AppConfigTest.java”。

注意:创建 MongoTemplate 时可能需要设置的其他可选属性包括默认的 WriteResultCheckingPolicyWriteConcern ReadPference 属性。引用 MongoTemplate 实例上的操作的首选方式是通过其接口 MongoOperations。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号