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);
    }
}

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

相关推荐
番茄Salad几秒前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
用户21411832636021 小时前
OpenSpec 实战:用规范驱动开发破解 AI 编程协作难题
后端
Olrookie1 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
LucianaiB2 小时前
招聘可以AI面试,那么我制作了一个AI面试教练不过分吧
后端
无奈何杨2 小时前
CoolGuard更新,ip2region升级、名单增加过期时间
后端
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 自定义静态资源目录 笔记31
spring boot·笔记·后端·spring
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 遍历 笔记40
spring boot·笔记·thymeleaf
Anthony_49263 小时前
逻辑清晰地梳理Golang Context
后端·go
Github项目推荐3 小时前
你的错误处理一团糟-是时候修复它了-🛠️
前端·后端
进击的圆儿3 小时前
高并发内存池项目开发记录01
后端