一、前言:
随着NoSQL数据库的广泛应用,MongoDB凭借其灵活的数据模型和高性能特性成为开发者的热门选择。本文将手把手教你如何在SpringBoot项目中集成MongoDB,实现基本的CRUD操作。
二、环境准备:
- JDK 17+
- SpringBoot 3.1.4
- MongoDB 6.0+
- IDEA开发工具
- Postman测试工具
三、 项目搭建:
1. 创建SpringBoot项目
通过start.spring.io生成项目时勾选:
- Spring Web
- Spring Data MongoDB
2. 添加依赖
org.springframework.boot
spring-boot-starter-data-mongodb
3. 配置文件
application.yml配置:
spring:
data:
mongodb:
uri: mongodb://localhost:27017/testdb
# 带密码连接示例
# uri: mongodb://user:password@localhost:27017/testdb?authSource=admin
四、核心功能实现
1. 实体类映射
@Document(collection = "products")
public class Product {
@Id
private String id;
private String name;
private BigDecimal price;
private LocalDateTime createTime;
// 省略getter/setter
}
2. 自定义Repository
public interface ProductRepository extends MongoRepository {
List findByNameLike(String name);
@Query("{ 'price' : { $gt: ?0 } }")
List findByPriceGreaterThan(BigDecimal price);
}
3. Service层实现
@Service
public class ProductService {
@Autowired
private ProductRepository repository;
public Product createProduct(Product product) {
product.setCreateTime(LocalDateTime.now());
return repository.save(product);
}
// 其他CRUD方法...
}
4. Controller层
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping
public ResponseEntity create(@RequestBody Product product) {
return ResponseEntity.ok(productService.createProduct(product));
}
// 其他端点...
}
五、进阶功能
1. 自定义MongoTemplate操作
@Autowired
private MongoTemplate mongoTemplate;
public List complexQuery() {
Query query = new Query();
query.addCriteria(Criteria.where("price").gt(100)
.and("name").regex("^A"));
return mongoTemplate.find(query, Product.class);
}
2. 事务支持
@Transactional
public void batchInsert(List products) {
repository.saveAll(products);
}
六、测试验证
- 启动MongoDB服务
- 运行SpringBoot应用
- 使用Postman测试接口:
- POST /api/products
{
"name": "MacBook Pro",
"price": 15999.00
}
七、常见问题排查
- 连接失败检查:MongoDB服务是否启动防火墙是否开放27017端口用户权限是否正确
- 时区问题处理:
@Bean
public MongoCustomConversions customConversions() {
List<Converter,?>> converters = new ArrayList<>();
converters.add(new DateToLocalDateTimeConverter());
return new MongoCustomConversions(converters);
}
八、总结
本文完整演示了SpringBoot集成MongoDB的流程,涵盖基础CRUD操作、复杂查询和事务处理。MongoDB的灵活Schema特性非常适合需要快速迭代的项目,结合SpringData的封装能显著提升开发效率。