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

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

相关推荐
微信-since8119215 分钟前
[ruby on rails] 安装docker
后端·docker·ruby on rails
bjzhang751 小时前
SpringBoot开发——Maven多模块工程最佳实践及详细示例
spring boot·maven·maven多模块工程
chusheng18401 小时前
Java项目-基于SpringBoot+vue的租房网站设计与实现
java·vue.js·spring boot·租房·租房网站
计算机毕设孵化场2 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_2 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方3 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm3 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
Rverdoser3 小时前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb