SpringBoot与MongoDB深度整合及应用案例
SpringBoot与MongoDB深度整合及应用案例
在当今快速发展的软件开发领域,NoSQL数据库因其灵活性和可扩展性而变得越来越流行。MongoDB,作为一款领先的NoSQL数据库,以其文档导向的存储模型和强大的查询能力脱颖而出。本文将为您提供一个全方位的指南,从MongoDB的基础介绍到在SpringBoot项目中的整合实践,助您快速上手。
MongoDB核心特性一览
MongoDB是一款开源的NoSQL数据库,它以其高性能、高可用性和易扩展性在大数据时代脱颖而出。以下是MongoDB的一些核心特性:
- 文档存储:以类似JSON的文档形式存储数据,灵活且功能强大。
- 高可扩展性:通过分片技术,MongoDB能够水平扩展,应对海量数据挑战。
- 动态模式:无需预定义模式,MongoDB允许文档字段的灵活变化。
- 强大的查询语言:支持复杂的查询操作,如过滤、排序、聚合等。
- 索引支持:提供多种索引类型,加速查询效率。
- 复制和高可用性:通过数据复制和自动故障转移,确保数据的安全性和可用性。
MongoDB的应用场景概览
MongoDB适用于多种数据存储需求,尤其是在处理半结构化数据和需要高度灵活性的场景中。以下是一些典型的应用场景:
- 大数据存储与分析:存储和分析日志、社交媒体数据等。
- 实时分析:利用聚合框架进行实时数据聚合和分析。
- 内容管理系统(CMS):处理多媒体资源和协同编辑。
- 物联网(IoT):处理来自传感器和设备的实时数据。
- 移动应用:支持灵活的数据模型,适应应用需求变化。
MongoDB的安装与配置
安装包形式安装
在CentOS系统中,通过tar包安装MongoDB的步骤如下:
-
下载MongoDB:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.4.0.tgz
-
解压MongoDB:
tar -zxvf mongodb-linux-x86_64-4.4.0.tgz
-
移动MongoDB文件夹:
sudo mv mongodb-linux-x86_64-4.4.0 /opt/mongodb
-
创建数据和日志目录:
sudo mkdir -p /data/db sudo mkdir -p /var/log/mongodb
-
配置环境变量:
编辑/etc/profile
文件,添加MongoDB路径到PATH:export PATH=/opt/mongodb/bin:$PATH
-
使环境变量生效:
source /etc/profile
-
启动MongoDB服务:
mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork
Docker形式安装
在Docker中安装MongoDB的步骤如下:
-
拉取MongoDB镜像:
docker pull mongo
-
创建并运行MongoDB容器:
docker run --name my-mongodb -p 27017:27017 -d mongo
-
查看运行中的容器:
docker ps
-
连接到MongoDB容器:
docker exec -it my-mongodb mongo
-
停止并删除MongoDB容器:
docker stop my-mongodb docker rm my-mongodb
MongoDB基础语法与操作
创建数据库和集合
在MongoDB中,数据存储在集合中,类似于关系型数据库的表。以下是创建集合并插入文档的示例:
use my_db
db.Books.insertOne({title: "如何使用MongoDB",author: "IT小辉同学",year: 2023
})
插入数据
-
单条插入:
db.Books.insertOne({title: "如何使用MongoDB",author: "IT小辉同学",year: 2023 })
-
多条插入:
db.Books.insertMany([{ title: "平凡的世界", author: "路遥", year: 1986 },{ title: "呐喊", author: "鲁迅", year: 1923 } ])
查找数据
-
基本查询:
db.Books.find()
-
条件查询:
db.Books.find({ author: "鲁迅" })
-
投影查询:
db.Books.find({}, { title: 1, author: 1, _id: 0 })
-
排序查询:
db.Books.find().sort({ year: 1 })
-
限制查询结果数量:
db.Books.find().limit(3)
更新数据
-
单条更新:
db.Books.updateOne({ title: "橘颂", author: "张炜", year: 2022 },{ $set: { year: 2023 } } )
-
多条更新:
db.Books.updateMany({ title: "橘颂", author: "张炜", year: 2022 },{ $set: { year: 2023 } } )
删除数据
-
单条删除:
db.Books.deleteOne({ title: "橘颂", author: "张炜", year: 2023 } )
-
多条删除:
db.Books.deleteMany({ year: "2021" } )
SpringBoot整合MongoDB
整合方式一:继承MongoRepository
在SpringBoot中整合MongoDB,可以通过继承MongoRepository
来简化数据库操作。以下是整合步骤:
-
添加依赖:
在pom.xml
中添加Spring Data MongoDB依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope> </dependency>
-
配置数据库连接:
在application.properties
中配置MongoDB连接信息:spring.data.mongodb.uri=mongodb://192.168.18.181:27017/my_db
-
创建实体类:
创建一个实体类表示MongoDB中的文档:import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "books") @Data public class Book {@Idprivate String id;private String title;private String author;private int year; }
-
创建Repository接口:
创建一个继承自MongoRepository
的接口:import com.xiaohui.pojo.Book; import org.springframework.data.mongodb.repository.MongoRepository; import java.util.List;public interface BookRepository extends MongoRepository<Book, String> {List<Book> findByAuthor(String author); }
-
使用Repository:
在服务类中注入自定义Repository并使用:import com.xiaohui.mapper.BookRepository; import com.xiaohui.pojo.Book; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List;@Service public class BookService {private final BookRepository bookRepository;@Autowiredpublic BookService(BookRepository bookRepository) {this.bookRepository = bookRepository;}public List<Book> findByAuthor(String author) {return bookRepository.findByAuthor(author);} }
-
创建控制层访问接口:
import com.xiaohui.pojo.Book; import com.xiaohui.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.HashMap; import java.util.List;@RestController @RequestMapping("/api") public class BookController {@Autowiredprivate BookService bookService;@GetMapping("/list")public HashMap<String,Object> getBookList() {String author = "张炜";HashMap<String,Object> books = new HashMap<>();List<Book> bookList = bookService.findByAuthor(author);books.put("books", bookList);return books;} }
整合方式二:注解MongoTemplate
另一种整合方式是使用MongoTemplate
,以下是步骤:
-
注入MongoTemplate:
在服务类中注入MongoTemplate
:import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Service;@Service public class BookService {private final MongoTemplate mongoTemplate;public BookService(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;} }
-
执行MongoDB操作:
使用MongoTemplate
执行查询:import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query;public List<Book> findByAuthor(String author) {Query query = new Query(Criteria.where("author").is(author));return mongoTemplate.find(query, Book.class); }
您——作为读者和开发者——将能够获得以下知识和技能:
-
MongoDB核心概念的理解:您将掌握MongoDB的基础特性,包括其文档存储模式、高可扩展性、动态模式以及强大的查询语言。
-
MongoDB的应用场景:您将了解到MongoDB在不同领域的应用,包括大数据存储、实时分析、内容管理系统、物联网和移动应用开发。
-
MongoDB的安装与配置:您将学会如何在不同的环境下安装MongoDB,包括传统的tar包安装方法和使用Docker容器的方式。
-
MongoDB基础操作:您将学习到如何使用MongoDB的基础语法进行数据库和集合的创建、数据的增删改查等操作。
-
SpringBoot与MongoDB的整合:您将掌握两种在SpringBoot项目中整合MongoDB的方法:继承MongoRepository和使用MongoTemplate。
-
实际开发技能:通过实际的代码示例,您将学会如何在SpringBoot项目中配置MongoDB连接、创建实体类、定义Repository接口以及编写控制层代码来访问MongoDB。
-
问题解决能力:在遇到数据库操作问题时,您将具备诊断和解决问题的能力,这对于任何开发人员来说都是宝贵的技能。
-
持续学习与进步:本文不仅提供了知识,还激发了您对新技术的好奇心和学习欲望,鼓励您在技术的道路上不断探索和前进。
通过本文的学习,您将能够更加自信地在项目中应用MongoDB,无论是进行数据存储还是复杂的查询操作。希望您能够将这些知识应用到实际工作中,提升开发效率,创造出更加优秀的软件产品。
你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!
相关文章:

SpringBoot与MongoDB深度整合及应用案例
SpringBoot与MongoDB深度整合及应用案例 在当今快速发展的软件开发领域,NoSQL数据库因其灵活性和可扩展性而变得越来越流行。MongoDB,作为一款领先的NoSQL数据库,以其文档导向的存储模型和强大的查询能力脱颖而出。本文将为您提供一个全方位…...
Redis模拟延时队列 实现日程提醒
使用Redis模拟延时队列 实际上通过MQ实现延时队列更加方便,只是在实际业务中种种原因导致最终选择使用redis作为该业务实现的中间件,顺便记录一下。 该业务是用于日程短信提醒,用户添加日程后,就会被放入redis队列中等待被执行发…...

vue项目中富文本编辑器的实现
文章目录 vue前端实现富文本编辑器的功能需要用到第三方库1. 安装包2.全局引入注册3.组件内使用4.图片缩放功能实现①安装包②注册并添加配置项③报错解决 vue前端实现富文本编辑器的功能需要用到第三方库 vue2使用vue-quill-editor,vue3使用vueup/vue-quill&#…...
nginx 配置lua执行shell脚本
1.需要nginx安装lua_nginx_module模块,这一步安装时,遇到一个坑,nginx执行configure时,一直提示./configure: error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x。 网上一堆方法都试了,都…...

Keil+VSCode优化开发体验
目录 一、引言 二、详细步骤 1、编译器准备 2、安装相应插件 2.1 安装C/C插件 2.2 安装Keil相关插件 3、添加keil环境变量 4、加载keil工程文件 5、VSCode中成功添加工程文件后可能出现的问题 5.1 编码不一致问题 6、在VSCode中进行编译工程以及烧录程序 7、效果展示…...

vue2中引入cesium全步骤
1.npm 下载cesium建议指定版本下载,最新版本有兼容性问题 npm install cesium1.95.0 2.在node_models中找到cesium将此文件下的Cesium文件复制出来放在项目的静态资源public中或者static中,获取去github上去下载zip包放在本地也可以 3.在index.html中引…...
工程师 - 智能家居方案介绍
1. 智能家居硬件方案概述 智能家居硬件方案是实现家庭自动化的重要组件,通过集成各种设备来提升生活的便利性、安全性和效率。这些方案通常结合了物联网技术,为用户提供智能化、自动化的生活体验。硬件方案的选择直接影响到智能家居系统的性能、兼容性、…...
中小企业人事管理:SpringBoot框架高级应用
摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,中小企业人事管理系统当然也不能排除在外。中小企业人事管理系统是以实际运用为开发背景,运用软件工程原理和…...

嵌入式Linux驱动开发日记
目录 让我们从环境配置开始 目标平台 从Ubuntu开始 从交叉编译器继续 arm-linux-gnueabihf-gcc vscode 没学过ARM汇编 正文开始——速度体验一把 写一个链接脚本 写一个简单的Makefile脚本 使用正点原子的imxdownload下载到自己的SD卡上 更进一步的笔记和说明 从IM…...
迪杰特斯拉算法(Dijkstra‘s)
迪杰斯特拉算法(Dijkstras algorithm)是由荷兰计算机科学家艾兹格迪科斯彻(Edsger W. Dijkstra)在1956年提出的,用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这个算法广泛应用于网络路由、地图导航等领…...
reids基础
数据结构类型 String setnx //设置key不存在,则添加成功 setex name 10 jack // key 10s失效,自动删除 hash hset hget list 按添加数据排序 lpush //左侧插入 rpush //右侧插入 set 不重复 sadd //添加…...

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
在当今数字化、网络化的时代背景下,视频监控技术已广泛应用于各行各业,成为保障安全、提升效率的重要工具。然而,面对复杂多变的监控需求和跨区域、网络化的管理挑战,传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…...
SparkContext讲解
SparkContext讲解 什么是 SparkContext? SparkContext 是 Spark 应用程序的入口点,是 Spark 的核心组件之一。每个 Spark 应用程序启动时,都会创建一个 SparkContext 对象,它负责与集群管理器(如 YARN、Mesos 或 Spa…...

MODBUS TCP转CANOpen网关
Modbus TCP转CANopen网关 型号:SG-TCP-COE-210 产品用途 本网关可以实现将CANOpen接口设备连接到MODBUS TCP网络中;并且用户不需要了解具体的CANOpen和Modbus TCP 协议即可实现将CANOpen设备挂载到MODBUS TCP接口的 PLC上,并和CANOpen设备…...

渗透测试---shell(4)脚本与用户交互以及if条件判断
声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人一律不承担一切后果 目录 一、shell脚本与用户进行交互 使用 read 指…...
02_Spring_IoC实现
接下来先简单说一下关于IoC的一些要点,后面我们再详细一步一步讨论。 一、IoC控制反转 IoC控制反转它是一种思想,不是具体的实现控制反转的目的是为了降低程序的耦合度,提高程序的可扩展性,从而满足OCP原则和DIP原则控制反转,那到底反转是什么东西? 我们不再使用某个对象…...

使用Python3实现Gitee码云自动化发布
仓库信息 https://gitee.com/liumou_site/ip 实现代码 import osimport requests from loguru import loggerdef gitee(ver, message, prerelease: bool False):"""在 Gitee 上创建发布版本:param ver: 版本号:param message: 发布信息:param prerelease: 是…...
Ubuntu24.04下的docker问题
按官网提示是可以安装成功的,但是curl无法使用https下载,会造成下述语句执行失败 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https…...
PAT (Basic Level) Practice (中文)1002 写出这个数
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 #include<bits/stdc.h> using namespace std; string a; int sum0; int f0; int n[10005]; int main(){ cin>>a; int c0; int laa.size(); for(int i…...
C07.L07.STL之映射.应用2.统计数字
题目描述 某次科研调查时得到了 n 个自然数,每个数均不超过 1500000000 (1.5*10^9 )。已知不相同的数不超过 10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 输入格式 包含 2 行: 第…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...