Spring Data MongoDB 教程

CRUD 简单示例

Spring Data MongoDB 中,MongoTemplate 类可以让你保存(save)、更新(update)和删除(delete)你的领域对象,并将这些领域对象映射到存储在 MongoDB 中的文档。下面就将通过一个简单的例子演示如何使用它。

配置 MongoTemplate

创建一个 @Configuration 配置类去配置 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() {
       return MongoClients.create("mongodb://localhost:27017");
   }

   @Bean
   public MongoTemplate mongoTemplate(MongoClient mongoClient) {
       return new MongoTemplate(mongoClient, "test");
   }

}

创建 Person 实体

该实体对应 MongoDB 数据库中的对应集合,如下:

package com.hxstrive.springdata.mongodb.entity;

import lombok.Builder;
import lombok.Data;
import lombok.ToString;

/**
* 实体
* @author hxstrive.com 2022/12/23
*/
@Data
@Builder
@ToString
public class Person {
   private String id;
   private String name;
   private int age;
}

客户端

下面将演示使用两者方式去使用 MongoTemplate,如下:

标准 Java 的方式去使用 MongoTemplate

package com.hxstrive.springdata.mongodb;

import com.hxstrive.springdata.mongodb.entity.Person;
import com.mongodb.client.MongoClients;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
import java.util.List;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.core.query.Update.update;

/**
* 使用 MongoTemplate 进行 CRUD 操作
* @author hxstrive.com 2022/12/23
*/
public class MongoApp {

   public static void main(String[] args) {
       // 注意:SimpleMongoClientDbFactory 已经过时,不推荐使用
       MongoOperations mongoOps = new MongoTemplate(
               new SimpleMongoClientDbFactory(MongoClients.create(), "database"));

       Person p = Person.builder().name("Joe").age(34).build();

       // 将对象插入到数据库中
       mongoOps.insert(p);
       System.out.println("Insert: " + p);

       // 查找数据
       p = mongoOps.findById(p.getId(), Person.class);
       System.out.println("Found: " + p);

       // 根据条件更新数据
       mongoOps.updateFirst(query(where("name").is("Joe")), update("age", 35), Person.class);
       p = mongoOps.findOne(query(where("name").is("Joe")), Person.class);
       System.out.println("Updated: " + p);

       // 删除数据
       mongoOps.remove(p);

       // 检查删除数据是否成功
       List<Person> people =  mongoOps.findAll(Person.class);
       System.out.println("Number of people = : " + people.size());

       // 删除集合
       mongoOps.dropCollection(Person.class);
   }

}

运行代码,输出如下:

Insert: Person(id=63a536dc0f05bb38396c7e05, name=Joe, age=34)
Found: Person(id=63a536dc0f05bb38396c7e05, name=Joe, age=34)
Updated: Person(id=63a536dc0f05bb38396c7e05, name=Joe, age=35)
Number of people = : 0

通过自动注入 MongoTemplate 依赖

package com.hxstrive.springdata.mongodb;

import com.hxstrive.springdata.mongodb.entity.Person;
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 java.util.List;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.core.query.Update.update;

@SpringBootTest
class MongoAppTest {

   @Autowired
   private MongoTemplate mongoTemplate;

   @Test
   void contextLoads() {
       Person p = Person.builder().name("Joe").age(34).build();

       // 将对象插入到数据库中
       mongoTemplate.insert(p);
       System.out.println("Insert: " + p);

       // 查找数据
       p = mongoTemplate.findById(p.getId(), Person.class);
       System.out.println("Found: " + p);

       // 根据条件更新数据
       mongoTemplate.updateFirst(query(where("name").is("Joe")), update("age", 35), Person.class);
       p = mongoTemplate.findOne(query(where("name").is("Joe")), Person.class);
       System.out.println("Updated: " + p);

       // 删除数据
       mongoTemplate.remove(p);

       // 检查删除数据是否成功
       List<Person> people =  mongoTemplate.findAll(Person.class);
       System.out.println("Number of people = : " + people.size());

       // 删除集合
       mongoTemplate.dropCollection(Person.class);
   }

}

运行代码,输出如下:

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