本章节将介绍怎样基于 Java 或者 XML 方式去实例化 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)
上面介绍了通过 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 时可能需要设置的其他可选属性包括默认的 WriteResultCheckingPolicy、WriteConcern 和 ReadPference 属性。引用 MongoTemplate 实例上的操作的首选方式是通过其接口 MongoOperations。