当前位置: 首页 > news >正文

在SpringBoot中优雅整合MongoDB——让你的数据存储更灵活

文章目录

        • 一、两种整合方式:MongoTemplate 与 MongoRepository
      • 二、准备工作
        • 第一步:创建SpringBoot项目并引入MongoDB依赖
        • 第二步:配置MongoDB连接
        • 第三步:创建实体类
      • 三、使用MongoRepository进行操作
        • 1. 创建Repository接口
        • 2. 编写测试类
      • 四、使用MongoTemplate进行操作
        • 1. 使用示例
      • 五、总结

在现代开发中,关系型数据库如MySQL虽然常见,但在某些场景下,非关系型数据库(NoSQL)如MongoDB更能满足需求。尤其是在需要存储灵活的数据结构时,MongoDB的文档模型比起传统的表格结构更加适合。今天,我将带你一步步整合SpringBoot与MongoDB,让你能轻松驾驭这个强大的数据库。

一、两种整合方式:MongoTemplate 与 MongoRepository

Spring Data MongoDB 提供了两种主要的操作MongoDB的方式:

  1. MongoTemplate:提供了更细粒度的控制,适合复杂查询和操作。
  2. MongoRepository:基于Spring Data Repository的简化操作,更加符合Spring Data的风格,适合CRUD操作。

我们将分别展示如何使用这两种方式来操作MongoDB。

二、准备工作

在开始编写代码之前,我们需要进行一些基本的项目配置。

第一步:创建SpringBoot项目并引入MongoDB依赖

首先,我们创建一个SpringBoot项目,并在pom.xml文件中引入MongoDB相关的依赖:

<dependencies><!-- Spring Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MongoDB Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- Testing Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
第二步:配置MongoDB连接

接下来,我们在application.yml文件中配置MongoDB的连接信息:

spring:data:mongodb:database: daijiahost: 192.168.2.129port: 27017
第三步:创建实体类

我们创建一个User实体类,它将映射到MongoDB中的user集合。

@Data
@Document("user")
public class User {@Idprivate ObjectId id;private String name;private Integer age;private String email;private Date createDate;
}

三、使用MongoRepository进行操作

1. 创建Repository接口

首先,我们创建一个接口UserRepository,它继承自MongoRepository

public interface UserRepository extends MongoRepository<User, ObjectId> {
}
2. 编写测试类

在测试类中,我们可以轻松地进行CRUD操作:

@SpringBootTest
public class MongoRepositoryTest {@Autowiredprivate UserRepository userRepository;// 添加用户@Testpublic void add() {User user = new User();user.setName("mary");user.setAge(30);user.setCreateDate(new Date());userRepository.save(user);}// 查询所有用户@Testpublic void findAll() {List<User> list = userRepository.findAll();System.out.println(list);}// 根据ID查询用户@Testpublic void testFindById() {Optional<User> optional = userRepository.findById(new ObjectId("666a9a85f5294513720647ff"));optional.ifPresent(System.out::println);}// 条件查询 + 排序@Testpublic void testFindCondition() {User user = new User();user.setAge(20);Example<User> example = Example.of(user);Sort sort = Sort.by(Sort.Direction.DESC, "name");List<User> list = userRepository.findAll(example, sort);System.out.println(list);}// 分页查询@Testpublic void testPage() {PageRequest pageable = PageRequest.of(0, 2);Page<User> page = userRepository.findAll(pageable);System.out.println(page.getContent());}// 更新用户信息@Testpublic void testUpdateUser() {Optional<User> optional = userRepository.findById(new ObjectId("64eee9dff317c823c62b4faf"));optional.ifPresent(user -> {user.setAge(100);userRepository.save(user);System.out.println(user);});}// 删除用户@Testpublic void testDeleteUser() {userRepository.deleteById(new ObjectId("64eee9dff317c823c62b4faf"));}
}

四、使用MongoTemplate进行操作

如果你需要更灵活的操作,可以选择使用MongoTemplate

1. 使用示例

同样,我们编写一个测试类来演示如何使用MongoTemplate进行操作:

@SpringBootTest
public class MongoTemplateTest {@Autowiredprivate MongoTemplate mongoTemplate;// 添加用户@Testpublic void add() {User user = new User();user.setName("test");user.setAge(20);user.setCreateDate(new Date());mongoTemplate.insert(user);}// 查询所有用户@Testpublic void findAll() {List<User> list = mongoTemplate.findAll(User.class);list.forEach(System.out::println);}// 根据ID查询用户@Testpublic void testFindId() {User user = mongoTemplate.findById("666a9b5e9a3653796627bb3c", User.class);System.out.println(user);}// 条件查询@Testpublic void testCondition() {Criteria criteria = Criteria.where("name").is("test").and("age").is(20);Query query = new Query(criteria);List<User> list = mongoTemplate.find(query, User.class);System.out.println(list);}// 分页查询@Testpublic void testPage() {Query query = new Query();List<User> list = mongoTemplate.find(query.skip(0).limit(2), User.class);list.forEach(System.out::println);}// 更新用户信息@Testpublic void testUpdateUser() {Criteria criteria = Criteria.where("_id").is("64eeeae31711344f35635788");Query query = new Query(criteria);Update update = new Update();update.set("name", "zhangsan");update.set("age", 99);UpdateResult result = mongoTemplate.upsert(query, update, User.class);System.out.println(result.getModifiedCount());}// 删除用户@Testpublic void testRemove() {Criteria criteria = Criteria.where("_id").is("64eeeae31711344f35635788");Query query = new Query(criteria);DeleteResult result = mongoTemplate.remove(query, User.class);System.out.println(result.getDeletedCount());}
}

五、总结

通过这篇博客,你已经了解了如何在SpringBoot中整合MongoDB,并通过两种不同的方式(MongoRepository和MongoTemplate)进行数据操作。对于简单的CRUD操作,MongoRepository可以让你的代码更加简洁;而MongoTemplate则在你需要更复杂的查询或更新操作时提供了更大的灵活性。


http://www.mrgr.cn/news/6497.html

相关文章:

  • 东方银行--用 MinIO 和 Dremio 替代 Hadoop
  • 文件操作
  • c++链表(list)
  • 单例模式创建方式
  • 启动zookeeper成功后,查看状态显示It is propbably not running
  • 前端宝典十三:node网络详解Tcp/IP/Http及网络安全防御
  • 一个集成了ChatGPT的聊天应用,支持私有部署,含即时通讯功能,AI技术
  • 使用Python+os/shutil删除文件、空目录和非空目录
  • 输入一个序列,返回所有可能的出栈序列
  • ansible之playbook
  • 背包问题【算法 07】
  • 钓鱼的常见几种方式
  • Android Room DataBase
  • LP2801A/B/C/D/E 输出电压可调3.3V~24V,输出电流100mA~400mA
  • 一款好看的WordPress REST API 主题
  • 微知-PCIe配置空间中哪个字段表示设备类型?有哪三种类型?哪个字段表示厂商ID
  • oracle 事务回滚
  • 在Flux和Ideogram 2.0的竞争压力下,Midjourney每日开放25张免费额度
  • function call使用基础
  • 汇编语言:adc指令 和 sbb指令