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,它会自动配置MongoClient、MongoTemplate等关键组件。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");}
}
在上述配置类中,我们手动创建了MongoClient和MongoTemplate,并将它们注册为 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);}
}
上述代码中,通过@Autowired将UserRepository注入到UserService中,然后提供了保存用户和根据 ID 查找用户的方法。
五、总结
通过 Spring Boot 与 MongoDB 的集成,我们能够在项目启动时就自动将 MongoDB 相关组件注入到 Spring 容器中,从而便捷地进行数据操作。从项目初始化、配置连接到自定义配置以及实际的数据操作,Spring Boot 和 Spring Data MongoDB 提供了一套完整且高效的解决方案。
相关文章:
Spring Boot 集成 MongoDB:启动即注入的便捷实践
引言 在现代后端开发中,Spring Boot 凭借其快速开发、自动配置等特性深受开发者喜爱,而 MongoDB 以其灵活的文档存储结构和出色的扩展性,成为处理非结构化数据的首选数据库之一。将两者结合,利用 Spring Boot 的自动配置功能&…...
【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件
心血来潮,看到电视机顶盒满天飞的广告,想改造一下家里的电视盒子,学一下网上的人刷机,但是一切都不知道怎么开始,虽然折腾了一天,以失败告终,还是做点刷机笔记。 0.我的机器 年少不会甄别&…...
R语言的文件操作
R语言的文件操作 引言 在数据科学和分析的过程中,文件操作是不可或缺的一部分。R语言作为一种强大的统计计算和图形作图的编程语言,提供了丰富的文件操作函数,使得用户能够方便地读取和保存数据。本文将详细介绍R语言中的文件操作ÿ…...
锐捷路由器网关RG-NBR6135-E和锐捷交换机 Ruijie Reyee RG-ES224GC 电脑登录web方法
2025年1月17日22:29:35 最近淘了点东西,准备在家里搞一套深度学习的服务器,先把网关和交换机搞到了 锐捷路由器网关RG-NBR6135-E 电脑登录web方法 在拿到机器的时候,如果不是全新建议拿根牙签,差入reset 5-10秒,灯光会全部闪几下…...
论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24
论文地址:https://arxiv.org/abs/2403.01744 bib引用: 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工具,无需登录,无需成本,用完就走。 包括中文和英文版本。 官网地址: https://img2excel.openai2025.com 效果:...
深度学习篇---数据集分类
文章目录 前言第一部分:VOC数据集标签、COCO数据集格式1.VOC数据集标签的特点及优缺点特点优点缺点 2.COCO数据集标签的特点及优缺点特点优点缺点 3.YOLO数据集标签的特点及优缺点特点优点缺点 第二部分:VOC格式和YOLO格式1.VOC格式3.YOLO格式3.区别(1)文…...
Unity3D仿星露谷物语开发23之拿起道具的动画
1、目标 当点击库存栏上可以carry的道具时,首先arms替换为carry状态,同时手上拿着被点击的道具。当再次点击同一个道具时,ams替换为idle状态,手上放下之前的道具。 这个最主要的是要学会使用AnimatorOverrideController类。 2、…...
素描风格渲染
素描风格渲染(Hatching Style Rendering),是一种非真实感渲染(NPR),主要目的是使3D模型看起来像 手绘素描的视觉效果。这种风格的渲染常用于游戏、动画和电影中,用来创造一种独特的艺术风格 1、…...
STM32使用DSP库 Keil方式添加
文章目录 前言一、添加DSP库二、使能FPU及配置1. 使能FPU2. 增加编译的宏3.增加头文件的检索路径三. 验证1. 源码中添加2.代码测试前言 添加DSP有两种方案,本文采用的是是Keil 中添加。 一、添加DSP库 在创建好的工程中添加DSP库:步骤如下: 步骤1:选择运行环境管理; 步…...
【机器学习实战入门项目】MNIST数字分类机器学习项目
Python 深度学习项目:手写数字识别 为了使机器更加智能,开发者们正在深入研究机器学习和深度学习技术。人类通过不断练习和重复来学习执行某项任务,从而记住如何完成这些任务。然后,大脑中的神经元会自动触发,他们能够…...
利用 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…...
模块化架构与微服务架构,哪种更适合桌面软件开发?
前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比࿰…...
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 的直接支持,提供了更快的开发体验和更高的开发效率。 1.直接利用浏览器模块加载功能 更快加载速度:不需要打包…...
Mysql常见问题处理集锦
Mysql常见问题处理集锦 root用户密码忘记,重置的操作(windows上的操作)MySQL报错:ERROR 1118 (42000): Row size too large. 或者 Row size too large (> 8126).场景:报错原因解决办法 详解行大小限制示例:内容来源于网…...
Android SystemUI——CarSystemBar添加到窗口(十)
上一篇文章我们看到了车载状态栏 CarSystemBar 视图的创建流程,这里我们继续分析将车载状态栏添加到 Windows 窗口中。 一、添加状态栏到窗口 前面我们已经分析了构建视图对象容器和构建视图对象内容,接下来我们继续分析 attachNavBarWindows() 方法将视…...
《重生到现代之从零开始的C++生活》—— 类和对象1
类 我嘞个豆,类可是太重要了,简直是重中之重 class为定义类的关键字,stack为类的名字,{}为类的主题 class stack {void add (int a,int b){return ab;}//类的方法,成员函数int _c;int _d;//类的属性,成…...
《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记
paper:(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型(SSM) 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...
每日十题八股-2025年1月18日
1.服务器处理并发请求有哪几种方式? 2.讲一下io多路复用 3.select、poll、epoll 的区别是什么? 4.epoll 的 边缘触发和水平触发有什么区别? 5.redis,nginx,netty 是依赖什么做的这么高性能? 6.零拷贝是什么…...
3步搞定黑苹果配置:OpCore-Simplify让你告别复杂手动调试的终极解决方案
3步搞定黑苹果配置: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:华硕笔记本性能调校的轻量化革命 【免费下载链接】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编程式事务实战:为什么我放弃了Transactional注解 在SpringBoot开发中,事务管理一直是保证数据一致性的核心环节。大多数开发者习惯使用Transactional注解来简化事务配置,直到我在一个高并发订单系统中遭遇了事务失效的噩梦——凌晨…...
暗黑2存档编辑器实战宝典:d2s-editor深度评测与完全指南
暗黑2存档编辑器实战宝典:d2s-editor深度评测与完全指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 作为一名暗黑破坏神2的忠实玩家,你是否曾为刷不到心仪的装备而苦恼?是否想尝试不同的b…...
Flux2 Klein作品分享:当动漫人物走进现实,这效果太震撼了!
Flux2 Klein作品分享:当动漫人物走进现实,这效果太震撼了! 你是否曾经幻想过,自己喜欢的动漫角色如果能走进现实会是什么样子?那些二次元世界里的可爱脸庞、夸张表情和独特气质,如果变成真实人类会保留多少…...
终极指南:7步轻松绕过Windows 11硬件限制,用MediaCreationTool.bat实现无缝安装
终极指南:7步轻松绕过Windows 11硬件限制,用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人脸分析系统完整操作指南
零基础也能用!Face Analysis WebUI人脸分析系统完整操作指南 1. 它能帮你做什么?不只是猜年龄性别 1.1 一个浏览器,看懂照片里的所有“脸” 你是不是也好奇过,一张普通的照片里,除了能看出是男是女、大概多大&#…...
BepInEx插件依赖管理:5个高效解决多插件冲突的终极方案
BepInEx插件依赖管理:5个高效解决多插件冲突的终极方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx作为Unity游戏模组开发的强大框架,其核心价值…...
在RK3568上从零开始:用V4L2和MPP框架驱动IMX415摄像头获取实时码流(附完整代码流程)
RK3568实战:V4L2MPP驱动IMX415摄像头全流程解析 刚拿到RK3568开发板和IMX415摄像头模组时,我对着官方文档发呆了半小时——这堆专业术语和代码片段看得人头皮发麻。作为嵌入式Linux开发者,我们真正需要的是从设备树配置到码流获取的完整操作指…...
国产信创库fio破坏主备库以及备份故障处理--惜分飞奈
一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...
