SpringBoot接入mongodb例子,并有增删改查功能

1,首先,在pom.xml中添加依赖:

XML 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
	<!--上面这个依赖包含了Spring Data MongoDB的所有必要组件,
	下面是Springboot的start-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2,在 application.properties 或 application.yml 中配置MongoDB连接:

java 复制代码
spring.data.mongodb.uri=mongodb://username:password@localhost:27017/my_database

3,然后,例如创建一个实体类User:

java 复制代码
该实体类是映射MongoDB集合中的文档。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
 
@Document
public class User {
    @Id
    private String id;
    private String name;
	private String deptName;
    private int age;
	private int salary;
 
	private int pageNum;
	private int pageSize;
	
    // 省略构造器、getter和setter方法
}

4,创建一个UserRepository接口:

java 复制代码
使用Spring Data MongoDB提供的Repository接口来操作MongoDB,
这个接口继承自MongoRepository,它提供了基本的CRUD操作;
import org.springframework.data.mongodb.repository.MongoRepository;
 
public interface UserRepository extends MongoRepository<User, String> {

    // 这里MongoRepository提供了基本的CRUD方法,也可以自定义查询方法
	
}

5,创建一个UserService服务类:

java 复制代码
该服务类来调用Repository接口,
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.Optional;
 
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
	
	@Autowired
    private MongoTemplate mongoTemplate;
	
	// 新增
    public User saveUser(User user) {
		// 单个新增
		mongoTemplate.save(user);
        
		// 批量插入
		// List<User> users = new ArrayList<>();
		// users.add(...);
		// mongoTemplate.save(users, User.class);
    }
 
	// 精确查询
    public Optional<User> getUserById(String id) {
        return mongoTemplate.findById(id);
    }
	
	// 模糊查询
	public Optional<User> getUserByCondition(String name) {
		String param = (null == name) ? "" : name.trim();
		Criteria criteria = Criteria.where("name").regex(".*" + param + ".*");
		/** 上面正则匹配包含param的情况,
		下面是匹配以param为开头的情况*/
		//Criteria criteria = Criteria.where("name").regex("^" + param);
		Query query = new Query(criteria);
		List<User> result = mongoTemplate.find(query, User.class);		
        return result;
    }

	// 模糊分页并排序查询
	public Optional<User> getUserByCondition(User user) {
		// 创建各种查询条件
		Criteria criteria = new Criteria()
		.andOperator(
			Criteria.where("age").gte(40),
			Criteria.where("salary").gt(500)
		).orOperator(
			Criteria.where("name").regex("a"),
			Criteria.where("name").regex("b")
		);
		
		// 创建查询对象
		Query query = new Query(criteria);
		
		// 并指定排序方式
		query.with(
			Sort.by(
				Sort.Order.desc("age"),
				Sort.Order.asc("name")
			)
		)
		// 分页处理
		.skip(pageNum*pageSize).limit(pageSize);			
		List<User> result = mongoTemplate.find(query, User.class);		
        return result;
    }
	 
	// 全部查询
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
	
	// 精确更新操作
	public void update(User user) {
		if (null == user) {
			return;
		}
		Criteria criteria = Criteria.where("id").is(user.getId());
		Query query = new Query(criteria);
		Update updateObj = new Update().set("age", user.getAge());
		mongoTemplate.updateFirst(query, updateObj, User.class);
	}
	
	// 批量更新操作
	public void update(User user) {
		if (null == user) {
			return;
		}
		Criteria criteria = Criteria.where("salary").gt(300);
		Query query = new Query(criteria);
		Update updateObj = new Update()
			.set("salary", 600)
			.set("deptName", "工程部");
		// 仅更新第一条
		mongoTemplate.updateFirst(query, updateObj, User.class);
		
		// 全部更新
		mongoTemplate.updateMulti(query, updateObj, User.class);
	}
	
	// 删除
    public void deleteUserById(String id) {
        Criteria criteria = Criteria.where("id").is(id);  
        Query query = new Query(criteria);
        mongoTemplate.remove(query,User.class);

    }
}

6,再创建一个UserController控制器类来处理HTTP请求:

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.List;
import java.util.Optional;
 
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
 
    @PostMapping
    public User addUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
 
    @GetMapping("/{id}")
    public Optional<User> getUserById(@PathVariable("id") String id) {
        return userService.getUserById(id);
    }
 
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
 
    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable("id") String id) {
        userService.deleteUserById(id);
    }
}

7,创建一个启动类SpringBootDemoApplication:

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}

一个简单例子,欢迎拍砖讨论...

相关推荐
lpfasd12315 分钟前
Spring Boot 4.0.1 时变更清单
java·spring boot·后端
梦梦代码精1 小时前
《全栈开源智能体:终结企业AI拼图时代》
人工智能·后端·深度学习·小程序·前端框架·开源·语音识别
Victor3562 小时前
Hibernate(42)在Hibernate中如何实现分页?
后端
Victor3562 小时前
Hibernate(41)Hibernate的延迟加载和急加载的区别是什么?
后端
猪猪拆迁队2 小时前
2025年终总结-都在喊前端已死,这一年我的焦虑、挣扎与重组:AI 时代如何摆正自己的位置
前端·后端·ai编程
ConardLi2 小时前
SFT、RAG 调优效率翻倍!垂直领域大模型评估实战指南
前端·javascript·后端
Hooray3 小时前
2026年,站在职业生涯十字路口的我该何去何从?
前端·后端
唐叔在学习3 小时前
还在申请云服务器来传输数据嘛?试试P2P直连吧
后端·python
开心猴爷4 小时前
iOS 代码混淆在项目中的方式, IPA 级保护实践记录
后端
魅影骑士00104 小时前
柯里化函数
后端·设计模式