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

Spring Boot 集成 MongoDB:启动即注入的便捷实践

引言

在现代后端开发中,Spring Boot 凭借其快速开发、自动配置等特性深受开发者喜爱,而 MongoDB 以其灵活的文档存储结构和出色的扩展性,成为处理非结构化数据的首选数据库之一。将两者结合,利用 Spring Boot 的自动配置功能,在启动时就把 MongoDB 相关组件注入到容器中,能极大地提高开发效率。本文将深入探讨如何实现这一集成。

一、项目初始化

1.1 创建 Spring Boot 项目
首先,通过 Spring Initializr(https://start.spring.io/)来创建一个新的 Spring Boot 项目。在创建过程中,选择以下依赖:
Spring Data MongoDB:用于简化与 MongoDB 的交互。
Spring Web(可选,如果项目需要提供 Web 服务):方便构建 RESTful API 等 Web 应用。
1.2 项目结构
创建完成后,项目的基本结构如下:

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           └── mongodbdemo/
│   │               ├── MongodbDemoApplication.java
│   │               └──...
│   └── resources/
│       ├── application.properties
│       └──...
└── test/└── java/└── com/└── example/└── mongodbdemo/└── MongodbDemoApplicationTests.java

二、配置 MongoDB 连接

2.1 配置文件
src/main/resources/application.properties文件中添加 MongoDB 的连接配置:

spring.data.mongodb.uri=mongodb://localhost:27017/mydb

这里mongodb://localhost:27017/mydb表示连接到本地运行在 27017 端口的 MongoDB 实例,并使用名为mydb的数据库。如果需要认证,可以使用如下格式:

spring.data.mongodb.uri=mongodb://username:password@localhost:27017/mydb

三、自动创建并注入 MongoDB 组件

3.1 依赖注入原理
Spring Boot 的自动配置机制会根据项目中引入的依赖和配置文件,自动创建并注入相关的 Bean 到 Spring 容器中。对于 MongoDB,它会自动配置MongoClientMongoTemplate等关键组件。MongoClient负责与 MongoDB 服务器建立连接,而MongoTemplate则提供了一系列操作 MongoDB 的方法,如插入、查询、更新和删除等。
3.2 自定义配置(可选)
如果默认的自动配置不能满足需求,也可以通过创建自定义的配置类来进一步定制 MongoDB 的配置。例如:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;@Configuration
public class MongoConfig {@Beanpublic MongoClient mongoClient() {return MongoClients.create("mongodb://localhost:27017");}@Beanpublic MongoTemplate mongoTemplate() {return new MongoTemplate(mongoClient(), "mydb");}
}

在上述配置类中,我们手动创建了MongoClientMongoTemplate,并将它们注册为 Spring 容器中的 Bean。MongoTemplate构造函数中的mydb表示要使用的数据库名称。

四、使用 MongoDB 进行数据操作

4.1 创建实体类
假设我们要操作一个User对象,首先创建对应的实体类:

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "users")
public class User {@Idprivate String id;private String name;private int age;// 构造函数、Getter和Setter方法public User() {}public User(String name, int age) {this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

@Document注解指定了该实体类对应的 MongoDB 集合名称为users,@Id注解标识了该字段为文档的唯一标识符。
4.2 创建 Repository 接口
Spring Data MongoDB 提供了MongoRepository接口,通过继承它可以快速实现基本的数据操作方法。创建UserRepository接口:

import org.springframework.data.mongodb.repository.MongoRepository;
import com.example.mongodbdemo.model.User;public interface UserRepository extends MongoRepository<User, String> {
}

这里<User, String>表示操作的实体类是User,主键类型为String
4.3 数据操作示例
在服务层或控制器层中使用UserRepository进行数据操作。例如,在一个简单的服务类中:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.mongodbdemo.model.User;
import com.example.mongodbdemo.repository.UserRepository;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User saveUser(User user) {return userRepository.save(user);}public User findUserById(String id) {return userRepository.findById(id).orElse(null);}
}

上述代码中,通过@AutowiredUserRepository注入到UserService中,然后提供了保存用户和根据 ID 查找用户的方法。

五、总结

通过 Spring Boot 与 MongoDB 的集成,我们能够在项目启动时就自动将 MongoDB 相关组件注入到 Spring 容器中,从而便捷地进行数据操作。从项目初始化、配置连接到自定义配置以及实际的数据操作,Spring Boot 和 Spring Data MongoDB 提供了一套完整且高效的解决方案。

相关文章:

Spring Boot 集成 MongoDB:启动即注入的便捷实践

引言 在现代后端开发中&#xff0c;Spring Boot 凭借其快速开发、自动配置等特性深受开发者喜爱&#xff0c;而 MongoDB 以其灵活的文档存储结构和出色的扩展性&#xff0c;成为处理非结构化数据的首选数据库之一。将两者结合&#xff0c;利用 Spring Boot 的自动配置功能&…...

【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件

心血来潮&#xff0c;看到电视机顶盒满天飞的广告&#xff0c;想改造一下家里的电视盒子&#xff0c;学一下网上的人刷机&#xff0c;但是一切都不知道怎么开始&#xff0c;虽然折腾了一天&#xff0c;以失败告终&#xff0c;还是做点刷机笔记。 0.我的机器 年少不会甄别&…...

R语言的文件操作

R语言的文件操作 引言 在数据科学和分析的过程中&#xff0c;文件操作是不可或缺的一部分。R语言作为一种强大的统计计算和图形作图的编程语言&#xff0c;提供了丰富的文件操作函数&#xff0c;使得用户能够方便地读取和保存数据。本文将详细介绍R语言中的文件操作&#xff…...

锐捷路由器网关RG-NBR6135-E和锐捷交换机 Ruijie Reyee RG-ES224GC 电脑登录web方法

2025年1月17日22:29:35 最近淘了点东西&#xff0c;准备在家里搞一套深度学习的服务器&#xff0c;先把网关和交换机搞到了 锐捷路由器网关RG-NBR6135-E 电脑登录web方法 在拿到机器的时候&#xff0c;如果不是全新建议拿根牙签&#xff0c;差入reset 5-10秒,灯光会全部闪几下…...

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址&#xff1a;https://arxiv.org/abs/2403.01744 bib引用&#xff1a; misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…...

在线图片转为excel工具

在线图片转为excel工具&#xff0c;无需登录&#xff0c;无需成本&#xff0c;用完就走。 包括中文和英文版本。 官网地址&#xff1a; https://img2excel.openai2025.com 效果&#xff1a;...

深度学习篇---数据集分类

文章目录 前言第一部分&#xff1a;VOC数据集标签、COCO数据集格式1.VOC数据集标签的特点及优缺点特点优点缺点 2.COCO数据集标签的特点及优缺点特点优点缺点 3.YOLO数据集标签的特点及优缺点特点优点缺点 第二部分&#xff1a;VOC格式和YOLO格式1.VOC格式3.YOLO格式3.区别(1)文…...

Unity3D仿星露谷物语开发23之拿起道具的动画

1、目标 当点击库存栏上可以carry的道具时&#xff0c;首先arms替换为carry状态&#xff0c;同时手上拿着被点击的道具。当再次点击同一个道具时&#xff0c;ams替换为idle状态&#xff0c;手上放下之前的道具。 这个最主要的是要学会使用AnimatorOverrideController类。 2、…...

素描风格渲染

素描风格渲染&#xff08;Hatching Style Rendering&#xff09;&#xff0c;是一种非真实感渲染&#xff08;NPR&#xff09;&#xff0c;主要目的是使3D模型看起来像 手绘素描的视觉效果。这种风格的渲染常用于游戏、动画和电影中&#xff0c;用来创造一种独特的艺术风格 1、…...

STM32使用DSP库 Keil方式添加

文章目录 前言一、添加DSP库二、使能FPU及配置1. 使能FPU2. 增加编译的宏3.增加头文件的检索路径三. 验证1. 源码中添加2.代码测试前言 添加DSP有两种方案,本文采用的是是Keil 中添加。 一、添加DSP库 在创建好的工程中添加DSP库:步骤如下: 步骤1:选择运行环境管理; 步…...

【机器学习实战入门项目】MNIST数字分类机器学习项目

Python 深度学习项目&#xff1a;手写数字识别 为了使机器更加智能&#xff0c;开发者们正在深入研究机器学习和深度学习技术。人类通过不断练习和重复来学习执行某项任务&#xff0c;从而记住如何完成这些任务。然后&#xff0c;大脑中的神经元会自动触发&#xff0c;他们能够…...

利用 LNMP 实现 WordPress 站点搭建

部署MySQL数据库 在主机192.168.138.139主机部署数据库服务 包安装数据库 apt-get install mysql-server 创建wordpress数据库和用户并授权 mysql> create database wordpress;#MySQL8.0要求指定插件 mysql> create user wordpress192.168.138.% identified with mys…...

模块化架构与微服务架构,哪种更适合桌面软件开发?

前言 在现代软件开发中&#xff0c;架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景&#xff0c;尤其在C#桌面软件开发领域&#xff0c;模块化架构往往更加具有实践性。本文将对这两种架构进行对比&#xff0…...

2025.1.17——1200

2025.1.17——1200 Q1. 1200 Jellyfish has n n n green apples with values a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1​,a2​,…,an​ and Gellyfish has m m m green apples with values b 1 , b 2 , … , b m b_1,b_2,\ldots,b_m b1​,b2​,…,bm​. They will …...

vite工程化

Vite 通过直接利用浏览器的模块加载能力、将 CommonJS 模块转换为 ES 模块并缓存结果、基于原生 ES 模块的 HMR 以及对 TypeScript 的直接支持&#xff0c;提供了更快的开发体验和更高的开发效率。 1.直接利用浏览器模块加载功能 更快加载速度&#xff1a;不需要打包&#xf…...

Mysql常见问题处理集锦

Mysql常见问题处理集锦 root用户密码忘记&#xff0c;重置的操作(windows上的操作)MySQL报错&#xff1a;ERROR 1118 (42000): Row size too large. 或者 Row size too large (&#xff1e; 8126).场景&#xff1a;报错原因解决办法 详解行大小限制示例&#xff1a;内容来源于网…...

Android SystemUI——CarSystemBar添加到窗口(十)

上一篇文章我们看到了车载状态栏 CarSystemBar 视图的创建流程&#xff0c;这里我们继续分析将车载状态栏添加到 Windows 窗口中。 一、添加状态栏到窗口 前面我们已经分析了构建视图对象容器和构建视图对象内容&#xff0c;接下来我们继续分析 attachNavBarWindows() 方法将视…...

《重生到现代之从零开始的C++生活》—— 类和对象1

类 我嘞个豆&#xff0c;类可是太重要了&#xff0c;简直是重中之重 class为定义类的关键字&#xff0c;stack为类的名字&#xff0c;{}为类的主题 class stack {void add (int a,int b){return ab;}//类的方法&#xff0c;成员函数int _c;int _d;//类的属性&#xff0c;成…...

《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记

paper&#xff1a;(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型&#xff08;SSM&#xff09; 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...

每日十题八股-2025年1月18日

1.服务器处理并发请求有哪几种方式&#xff1f; 2.讲一下io多路复用 3.select、poll、epoll 的区别是什么&#xff1f; 4.epoll 的 边缘触发和水平触发有什么区别&#xff1f; 5.redis&#xff0c;nginx&#xff0c;netty 是依赖什么做的这么高性能&#xff1f; 6.零拷贝是什么…...

3步搞定黑苹果配置:OpCore-Simplify让你告别复杂手动调试的终极解决方案

3步搞定黑苹果配置&#xff1a;OpCore-Simplify让你告别复杂手动调试的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置…...

G-Helper:华硕笔记本性能调校的轻量化革命

G-Helper&#xff1a;华硕笔记本性能调校的轻量化革命 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and oth…...

SpringBoot编程式事务实战:为什么我放弃了@Transactional注解

SpringBoot编程式事务实战&#xff1a;为什么我放弃了Transactional注解 在SpringBoot开发中&#xff0c;事务管理一直是保证数据一致性的核心环节。大多数开发者习惯使用Transactional注解来简化事务配置&#xff0c;直到我在一个高并发订单系统中遭遇了事务失效的噩梦——凌晨…...

暗黑2存档编辑器实战宝典:d2s-editor深度评测与完全指南

暗黑2存档编辑器实战宝典&#xff1a;d2s-editor深度评测与完全指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 作为一名暗黑破坏神2的忠实玩家&#xff0c;你是否曾为刷不到心仪的装备而苦恼&#xff1f;是否想尝试不同的b…...

Flux2 Klein作品分享:当动漫人物走进现实,这效果太震撼了!

Flux2 Klein作品分享&#xff1a;当动漫人物走进现实&#xff0c;这效果太震撼了&#xff01; 你是否曾经幻想过&#xff0c;自己喜欢的动漫角色如果能走进现实会是什么样子&#xff1f;那些二次元世界里的可爱脸庞、夸张表情和独特气质&#xff0c;如果变成真实人类会保留多少…...

终极指南:7步轻松绕过Windows 11硬件限制,用MediaCreationTool.bat实现无缝安装

终极指南&#xff1a;7步轻松绕过Windows 11硬件限制&#xff0c;用MediaCreationTool.bat实现无缝安装 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors…...

零基础也能用!Face Analysis WebUI人脸分析系统完整操作指南

零基础也能用&#xff01;Face Analysis WebUI人脸分析系统完整操作指南 1. 它能帮你做什么&#xff1f;不只是猜年龄性别 1.1 一个浏览器&#xff0c;看懂照片里的所有“脸” 你是不是也好奇过&#xff0c;一张普通的照片里&#xff0c;除了能看出是男是女、大概多大&#…...

BepInEx插件依赖管理:5个高效解决多插件冲突的终极方案

BepInEx插件依赖管理&#xff1a;5个高效解决多插件冲突的终极方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx作为Unity游戏模组开发的强大框架&#xff0c;其核心价值…...

在RK3568上从零开始:用V4L2和MPP框架驱动IMX415摄像头获取实时码流(附完整代码流程)

RK3568实战&#xff1a;V4L2MPP驱动IMX415摄像头全流程解析 刚拿到RK3568开发板和IMX415摄像头模组时&#xff0c;我对着官方文档发呆了半小时——这堆专业术语和代码片段看得人头皮发麻。作为嵌入式Linux开发者&#xff0c;我们真正需要的是从设备树配置到码流获取的完整操作指…...

国产信创库fio破坏主备库以及备份故障处理--惜分飞奈

一、各自优势和对比 这是检索出来的数据&#xff0c;据说是根据第三方评测与企业数据&#xff0c;三款产品在代码生成质量上各有侧重&#xff1a; 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一&#xff1b;Python首生成率达92.3% SQL生成准确率提升35%&…...