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 行: 第…...
微信小程序组件详解:text 和 rich-text 组件的基本用法
微信小程序组件详解:text 和 rich-text 组件的基本用法 引言 在微信小程序的开发中,文本展示是用户界面设计中不可或缺的一部分。无论是简单的文本信息,还是复杂的富文本内容,text 和 rich-text 组件都能够帮助我们实现这些需求。本文将详细介绍这两个组件的基本用法,包…...
算法.图论-习题全集(Updating)
文章目录 本节设置的意义并查集篇并查集简介以及常见技巧并查集板子(洛谷)情侣牵手问题相似的字符串组岛屿数量(并查集做法)省份数量移除最多的同行或同列石头最大的人工岛找出知晓秘密的所有专家 建图及其拓扑排序篇链式前向星建图板子课程表 本节设置的意义 主要就是为了复习…...
this.$prompt 限制输入长度
this.$prompt(请输入关键词名称, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputPattern: /^\d{0,50}$/,inputErrorMessage: 关键词名称长度不能超过50个字符 }).then(({ value }) > {})...
JDBC使用p6spy记录实际执行SQL方法【解决SQL打印两次问题】
p6spy介绍 p6spy 是一个开源的 JDBC 数据源代理工具,主要用于拦截和记录应用程序与数据库之间的所有 SQL 操作,方便开发者进行 SQL 调试、性能监控和问题排查。 p6spy可以打印实际执行的sql,在开发过程中方便调试,和使用框架无关…...
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
在高并发场景下,Redis 通常用作缓存层,与数据库结合使用以提高系统的性能。为了保证缓存数据与数据库的最终一致性,通常采用的有双写机制、缓存失效机制,基于双写机制、缓存失效机制又衍生出来了消息队列、事件驱动架构等 常见机…...
Stable Diffusion核心网络结构——CLIP Text Encoder
🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&…...
C语言-11-18笔记
1.C语言数据类型 类型存储大小值范围char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295short2 字节…...
数据结构_图的遍历
深度优先搜索遍历 遍历思想 邻接矩阵上的遍历算法 void Map::DFSTraverse() {int i, v;for (i 0; i < MaxLen; i){visited[i] false;}for (i 0; i < Vexnum; i){// 如果顶点未访问,则进行深度优先搜索if (visited[i] false){DFS(i);}}cout << endl…...
设计LRU缓存
LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU(Least Recently Used,最近最少使用)缓存是一种常见的缓存淘汰算法,其基本思想是:当缓存空间已满时,移除最近最少使…...
python中的base64使用小笑话
在使用base64的时候将本地的图片转换为base64 代码如下,代码绝对正确 import base64 def image_to_data_uri(image_path):with open(image_path, rb) as image_file:image_data base64.b64encode(image_file.read()).decode(utf-8)file_extension image_path.sp…...
www.北京网站建设/开发外包网站
结构图1 11.2 监听结构...
做女装代理需要自建网站么/怎么做好网络营销
用matrix[0][j] 记录第j列是否为0 用matrix[i][0]记录第i行是否为0 因为在0 0 位置有重复,所以新开个变量记录第0行或者第0列 更新的时候先更新从第1行开始和从第1列开始 妙啊 哭了 class Solution {public void setZeroes(int[][] matrix) {int m matrix.len…...
北京网站建设公司空间续费北京/seo是什么职位简称
前言本文主要给大家介绍的是关于Android自定义View实现游戏摇杆键盘的相关内容,为什么会有这篇文章呢?因为在之前的一个项目,操作方向的方式为上下左右,左上需要同时按住左键和右键的方式进行操作。如下图:近来需要升级…...
wordpress 侧栏主题/上海今天发生的重大新闻
模板模式: 使用抽象操作在基类中定义基本方法,在子类中实现覆盖。模板模式将算法的轮廓保留在单独的方法中。该方法被称为模板方法。 和建造者模式非常类似。只是建造者模式多了一个类,指挥类,该类就是模板中基类的固定算法的功…...
海外vps/北京网站优化效果
本文转自:http://bldmickey.blog.sohu.com/55905939.html 原文作者:bldmickeygmail.com 2007-07-19 17:05 阅读(1274)评论(0)编辑删除 版权声明:转载时请务必以超链接形式标明文章原文出处和作者信息 个人声明:文章中的内容如果引…...
想自学做网站/爱站网长尾关键词挖掘
字符串内置方法的使用 设置字符串:st‘hello kitty’ 1、统计元素个数 Print(st.count(‘l’)) #结果为2 2、首字母大写 Print(st.capitalize()) #结果为Hello kitty 3、居中 Print(st.center(20,’#’)) #结果为…...