在 Spring Boot 项目中结合 MongoDB 进行操作是一个常见的需求。MongoDB 是一个高性能的 NoSQL 数据库,适用于存储大量数据和灵活的数据结构。下面是一个详细的步骤指南,介绍如何在 Spring Boot 项目中集成 MongoDB,并提供一些常用的操作示例。
1. 添加依赖
首先,在 pom.xml 文件中添加 Spring Boot 和 MongoDB 的相关依赖。
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
       x <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Boot Starter Data MongoDB -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <!-- Lombok for getter/setter/toString/etc. -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
        <scope>provided</scope>
    </dependency>
    <!-- Spring Boot Starter Test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>2. 配置 MongoDB 连接
在 application.properties 或 application.yml 文件中配置 MongoDB 连接信息。
application.properties
spring.data.mongodb.uri=mongodb://localhost:27017/your_databaseapplication.yml
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/your_database3. 创建实体类
使用 Lombok 注解来减少样板代码。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Data;
@Data
@Document(collection = "users")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;
    private String email;
}4. 创建 Repository 接口
继承 MongoRepository 接口,Spring Data MongoDB 提供了许多便捷的方法。
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}5. 创建 Service 层
创建服务层来处理业务逻辑。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }
    public User findUserById(String id) {
        return userRepository.findById(id).orElse(null);
    }
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    public void deleteUser(String id) {
        userRepository.deleteById(id);
    }
}6. 创建 Controller 层
创建控制器层来处理 HTTP 请求。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> getAllUsers() {
        return userService.findAllUsers();
    }
    @GetMapping("/{id}")
    public User getUserById(@PathVariable String id) {
        return userService.findUserById(id);
    }
    @PostMapping
    public User addUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
    @PutMapping("/{id}")
    public User updateUser(@PathVariable String id, @RequestBody User user) {
        user.setId(id);
        return userService.saveUser(user);
    }
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable String id) {
        userService.deleteUser(id);
    }
}7. 启动类
确保启动类位于正确的包路径下,以便 Spring Boot 自动扫描到所有组件。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}8. 测试
启动应用并测试各个接口是否正常工作。
mvn spring-boot:run可以使用 Postman 或其他 HTTP 客户端来测试这些接口。
快捷方式和最佳实践
- Lombok:使用 Lombok 可以大大减少样板代码,如 
getter、setter、toString等。 - 全局异常处理:使用 
@ControllerAdvice注解创建全局异常处理器,统一处理异常。 - 日志记录:使用 
logback或log4j2配置日志记录,方便调试和监控。 - 分页查询:Spring Data MongoDB 提供了内置的分页支持,使用 
Pageable对象即可轻松实现分页查询。 - 事务管理:使用 
@Transactional注解管理事务,确保数据的一致性和完整性。 










