文章目录
在现代开发中,关系型数据库如MySQL虽然常见,但在某些场景下,非关系型数据库(NoSQL)如MongoDB更能满足需求。尤其是在需要存储灵活的数据结构时,MongoDB的文档模型比起传统的表格结构更加适合。今天,我将带你一步步整合SpringBoot与MongoDB,让你能轻松驾驭这个强大的数据库。
一、两种整合方式:MongoTemplate 与 MongoRepository
Spring Data MongoDB 提供了两种主要的操作MongoDB的方式:
- MongoTemplate:提供了更细粒度的控制,适合复杂查询和操作。
- 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: daijia
host: 192.168.2.129
port:27017
第三步:创建实体类
我们创建一个
User
实体类,它将映射到MongoDB中的
user
集合。
@Data@Document("user")publicclassUser{@IdprivateObjectId id;privateString name;privateInteger age;privateString email;privateDate createDate;}
三、使用MongoRepository进行操作
1. 创建Repository接口
首先,我们创建一个接口
UserRepository
,它继承自
MongoRepository
:
publicinterfaceUserRepositoryextendsMongoRepository<User,ObjectId>{}
2. 编写测试类
在测试类中,我们可以轻松地进行CRUD操作:
@SpringBootTestpublicclassMongoRepositoryTest{@AutowiredprivateUserRepository userRepository;// 添加用户@Testpublicvoidadd(){User user =newUser();
user.setName("mary");
user.setAge(30);
user.setCreateDate(newDate());
userRepository.save(user);}// 查询所有用户@TestpublicvoidfindAll(){List<User> list = userRepository.findAll();System.out.println(list);}// 根据ID查询用户@TestpublicvoidtestFindById(){Optional<User> optional = userRepository.findById(newObjectId("666a9a85f5294513720647ff"));
optional.ifPresent(System.out::println);}// 条件查询 + 排序@TestpublicvoidtestFindCondition(){User user =newUser();
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);}// 分页查询@TestpublicvoidtestPage(){PageRequest pageable =PageRequest.of(0,2);Page<User> page = userRepository.findAll(pageable);System.out.println(page.getContent());}// 更新用户信息@TestpublicvoidtestUpdateUser(){Optional<User> optional = userRepository.findById(newObjectId("64eee9dff317c823c62b4faf"));
optional.ifPresent(user ->{
user.setAge(100);
userRepository.save(user);System.out.println(user);});}// 删除用户@TestpublicvoidtestDeleteUser(){
userRepository.deleteById(newObjectId("64eee9dff317c823c62b4faf"));}}
四、使用MongoTemplate进行操作
如果你需要更灵活的操作,可以选择使用
MongoTemplate
。
1. 使用示例
同样,我们编写一个测试类来演示如何使用
MongoTemplate
进行操作:
@SpringBootTestpublicclassMongoTemplateTest{@AutowiredprivateMongoTemplate mongoTemplate;// 添加用户@Testpublicvoidadd(){User user =newUser();
user.setName("test");
user.setAge(20);
user.setCreateDate(newDate());
mongoTemplate.insert(user);}// 查询所有用户@TestpublicvoidfindAll(){List<User> list = mongoTemplate.findAll(User.class);
list.forEach(System.out::println);}// 根据ID查询用户@TestpublicvoidtestFindId(){User user = mongoTemplate.findById("666a9b5e9a3653796627bb3c",User.class);System.out.println(user);}// 条件查询@TestpublicvoidtestCondition(){Criteria criteria =Criteria.where("name").is("test").and("age").is(20);Query query =newQuery(criteria);List<User> list = mongoTemplate.find(query,User.class);System.out.println(list);}// 分页查询@TestpublicvoidtestPage(){Query query =newQuery();List<User> list = mongoTemplate.find(query.skip(0).limit(2),User.class);
list.forEach(System.out::println);}// 更新用户信息@TestpublicvoidtestUpdateUser(){Criteria criteria =Criteria.where("_id").is("64eeeae31711344f35635788");Query query =newQuery(criteria);Update update =newUpdate();
update.set("name","zhangsan");
update.set("age",99);UpdateResult result = mongoTemplate.upsert(query, update,User.class);System.out.println(result.getModifiedCount());}// 删除用户@TestpublicvoidtestRemove(){Criteria criteria =Criteria.where("_id").is("64eeeae31711344f35635788");Query query =newQuery(criteria);DeleteResult result = mongoTemplate.remove(query,User.class);System.out.println(result.getDeletedCount());}}
五、总结
通过这篇博客,你已经了解了如何在SpringBoot中整合MongoDB,并通过两种不同的方式(MongoRepository和MongoTemplate)进行数据操作。对于简单的CRUD操作,MongoRepository可以让你的代码更加简洁;而MongoTemplate则在你需要更复杂的查询或更新操作时提供了更大的灵活性。
版权归原作者 Takumilovexu 所有, 如有侵权,请联系我们删除。