本章节将介绍怎样基于 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。