当前位置: 首页 > news >正文

Spring Boot 与 MongoDB 集成实战

Spring Boot 与 MongoDB 集成实战

引言

大家好,今天想和大家聊聊 Spring Boot 与 MongoDB 的集成实践。作为一名 Java 架构师,我在多个项目中使用了 MongoDB 作为文档数据库。MongoDB 的灵活性和高性能让它成为现代应用开发的理想选择。让我们一起深入探索。

1. MongoDB 基础配置

1.1 依赖配置

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies>

1.2 连接配置

spring: data: mongodb: uri: mongodb://user:password@localhost:27017/mydb # 或者使用分片配置 # uri: mongodb://user:password@host1:27017,host2:27017/mydb?replicaSet=rs0

2. 文档建模

2.1 实体类定义

@Document(collection = "users") public class User { @Id private String id; @Field("user_name") private String username; @Indexed(unique = true) private String email; @DBRef private List<Order> orders; @CreatedDate private LocalDateTime createdAt; // getters and setters } @Document(collection = "orders") public class Order { @Id private String id; private String productName; private BigDecimal amount; private OrderStatus status; // getters and setters }

3. Repository 操作

3.1 基础 CRUD

@Repository public interface UserRepository extends MongoRepository<User, String> { List<User> findByUsernameContaining(String username); Optional<User> findByEmail(String email); @Query("{ 'orders.status': ?0 }") List<User> findByOrderStatus(String status); @Query(value = "{ 'email': ?0 }", delete = true) void deleteByEmail(String email); }

4. 聚合查询

@Service public class UserAnalyticsService { @Autowired private MongoTemplate mongoTemplate; public List<Document> getUserOrderStats() { Aggregation aggregation = Aggregation.newAggregation( Aggregation.lookup("orders", "_id", "userId", "userOrders"), Aggregation.unwind("userOrders"), Aggregation.group("username") .sum("userOrders.amount").as("totalAmount") .count().as("orderCount"), Aggregation.sort(Sort.Direction.DESC, "totalAmount") ); return mongoTemplate.aggregate(aggregation, "users", Document.class) .getMappedResults(); } }

5. 事务支持

@Service public class OrderService { @Transactional public void createOrderWithTransaction(Order order, String userId) { // 创建订单 orderRepository.save(order); // 更新用户 User user = userRepository.findById(userId).orElseThrow(); user.getOrders().add(order); userRepository.save(user); } }

总结

Spring Boot 与 MongoDB 的集成非常顺畅,通过 Spring Data MongoDB,我们可以快速构建基于文档数据库的应用。在实际项目中,我们应该合理设计文档结构,充分利用 MongoDB 的特性,这其实可以更优雅一点。

如果有任何问题或建议,欢迎在评论区留言,我会认真回复每一条评论。


希望这篇文章对大家有所帮助。如果觉得有用,别忘了点赞、收藏和分享哦!

http://www.jsqmd.com/news/554200/

相关文章:

  • RAG系统意图识别模块设计与实现思路
  • 西安青木社婚纱摄影拍婚礼微电影好用吗,口碑说话 - mypinpai
  • 知乎电子书文字图片提取全攻略:Chrome开发者工具实战技巧
  • Ubuntu系统:Miniconda3快速安装与配置指南
  • 5个实用技巧,让圣女司幼幽-造相Z-Turbo文生图效果更惊艳
  • 造相-Z-Image在VSCode中的开发插件:AI辅助编程视觉化工具
  • 利用OWL ADVENTURE进行网络拓扑图智能识别与归档
  • 2026 小红书运营复盘:销量下滑的核心病根,与 1 人撬动矩阵的底层逻辑
  • ResNet残差连接实战:为什么你的深层网络总是不收敛?
  • 分析西安能拍婚礼微电影的靠谱机构,西安青木社婚纱摄影值得推荐吗? - 工业品网
  • OpenClaw多模态扩展:nanobot接入Stable Diffusion生成报告插图
  • Qwen3-ASR-1.7B真实案例展示:会议录音秒转文字,识别效果超乎想象
  • 燕窝回收认准本草拾光!上门鉴定,高价回收各类干燕窝 - 品牌排行榜单
  • MAA_Punish:战双帕弥什的智能解放方案
  • 排序算法---(四)
  • yz-bijini-cosplay常用Linux命令大全:运维必备技能
  • 跨平台协作:OpenClaw+nanobot实现Mac与Windows间的任务接力
  • 2026重庆无缝钢管定制精选:专业定制,服务热线速查,50 声测管/建筑声测管/卷制钢护筒/护筒,无缝钢管现货联系电话 - 品牌推荐师
  • Czkawka视频查重:释放硬盘空间的高效解决方案
  • 告别盲调!手把手教你用EB Tresos配置MCAL的Icu模块,精准捕获PWM占空比
  • 告别算法烦恼!用MAX30102 T03模块5分钟搞定Arduino心率血氧监测(附完整代码)
  • S32K144 SDK实战:从Bootloader到APP的无缝跳转实现
  • 别再只卷CNN了!用强化学习(RL)给YOLOv5打个辅助,实现工业零件精准定位(附PyTorch代码)
  • 2026年西安热门婚纱摄影品牌排名,新中式风格婚纱照靠谱推荐哪家 - myqiye
  • Mac鼠标增强工具深度演进:从2.2.5到3.0.8的架构变革与技术剖析
  • 大活络丸、牛黄清心丸闲置变现难?本草拾光上门全收 - 品牌排行榜单
  • Go 内存逃逸调试指南
  • 3步颠覆传统流程的教育资源获取利器:电子课本智能解析工具全攻略
  • BiliTools哔哩哔哩工具箱:5分钟搞定B站资源高效下载的完整解决方案
  • 图像标注难题如何破解?LabelImg工具全面解析与实战指南