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

SpringBoot与MongoDB深度整合及应用案例

SpringBoot与MongoDB深度整合及应用案例

在当今快速发展的软件开发领域,NoSQL数据库因其灵活性和可扩展性而变得越来越流行。MongoDB,作为一款领先的NoSQL数据库,以其文档导向的存储模型和强大的查询能力脱颖而出。本文将为您提供一个全方位的指南,从MongoDB的基础介绍到在SpringBoot项目中的整合实践,助您快速上手。
在这里插入图片描述

MongoDB核心特性一览

MongoDB是一款开源的NoSQL数据库,它以其高性能、高可用性和易扩展性在大数据时代脱颖而出。以下是MongoDB的一些核心特性:

  • 文档存储:以类似JSON的文档形式存储数据,灵活且功能强大。
  • 高可扩展性:通过分片技术,MongoDB能够水平扩展,应对海量数据挑战。
  • 动态模式:无需预定义模式,MongoDB允许文档字段的灵活变化。
  • 强大的查询语言:支持复杂的查询操作,如过滤、排序、聚合等。
  • 索引支持:提供多种索引类型,加速查询效率。
  • 复制和高可用性:通过数据复制和自动故障转移,确保数据的安全性和可用性。

MongoDB的应用场景概览

MongoDB适用于多种数据存储需求,尤其是在处理半结构化数据和需要高度灵活性的场景中。以下是一些典型的应用场景:

  • 大数据存储与分析:存储和分析日志、社交媒体数据等。
  • 实时分析:利用聚合框架进行实时数据聚合和分析。
  • 内容管理系统(CMS):处理多媒体资源和协同编辑。
  • 物联网(IoT):处理来自传感器和设备的实时数据。
  • 移动应用:支持灵活的数据模型,适应应用需求变化。

MongoDB的安装与配置

安装包形式安装

在CentOS系统中,通过tar包安装MongoDB的步骤如下:

  1. 下载MongoDB

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.4.0.tgz
    
  2. 解压MongoDB

    tar -zxvf mongodb-linux-x86_64-4.4.0.tgz
    
  3. 移动MongoDB文件夹

    sudo mv mongodb-linux-x86_64-4.4.0 /opt/mongodb
    
  4. 创建数据和日志目录

    sudo mkdir -p /data/db
    sudo mkdir -p /var/log/mongodb
    
  5. 配置环境变量
    编辑/etc/profile文件,添加MongoDB路径到PATH:

    export PATH=/opt/mongodb/bin:$PATH
    
  6. 使环境变量生效

    source /etc/profile
    
  7. 启动MongoDB服务

    mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork
    

Docker形式安装

在Docker中安装MongoDB的步骤如下:

  1. 拉取MongoDB镜像

    docker pull mongo
    
  2. 创建并运行MongoDB容器

    docker run --name my-mongodb -p 27017:27017 -d mongo
    
  3. 查看运行中的容器

    docker ps
    
  4. 连接到MongoDB容器

    docker exec -it my-mongodb mongo
    
  5. 停止并删除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来简化数据库操作。以下是整合步骤:

  1. 添加依赖
    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>
    
  2. 配置数据库连接
    application.properties中配置MongoDB连接信息:

    spring.data.mongodb.uri=mongodb://192.168.18.181:27017/my_db
    
  3. 创建实体类
    创建一个实体类表示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;
    }
    
  4. 创建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);
    }
    
  5. 使用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);}
    }
    
  6. 创建控制层访问接口

    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,以下是步骤:

  1. 注入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;}
    }
    
  2. 执行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);
    }
    

您——作为读者和开发者——将能够获得以下知识和技能:

  1. MongoDB核心概念的理解:您将掌握MongoDB的基础特性,包括其文档存储模式、高可扩展性、动态模式以及强大的查询语言。

  2. MongoDB的应用场景:您将了解到MongoDB在不同领域的应用,包括大数据存储、实时分析、内容管理系统、物联网和移动应用开发。

  3. MongoDB的安装与配置:您将学会如何在不同的环境下安装MongoDB,包括传统的tar包安装方法和使用Docker容器的方式。

  4. MongoDB基础操作:您将学习到如何使用MongoDB的基础语法进行数据库和集合的创建、数据的增删改查等操作。

  5. SpringBoot与MongoDB的整合:您将掌握两种在SpringBoot项目中整合MongoDB的方法:继承MongoRepository和使用MongoTemplate。

  6. 实际开发技能:通过实际的代码示例,您将学会如何在SpringBoot项目中配置MongoDB连接、创建实体类、定义Repository接口以及编写控制层代码来访问MongoDB。

  7. 问题解决能力:在遇到数据库操作问题时,您将具备诊断和解决问题的能力,这对于任何开发人员来说都是宝贵的技能。

  8. 持续学习与进步:本文不仅提供了知识,还激发了您对新技术的好奇心和学习欲望,鼓励您在技术的道路上不断探索和前进。

通过本文的学习,您将能够更加自信地在项目中应用MongoDB,无论是进行数据存储还是复杂的查询操作。希望您能够将这些知识应用到实际工作中,提升开发效率,创造出更加优秀的软件产品。

你掌握了那些或遇到那些问题,欢迎评论留言进行讨论!!!

相关文章:

SpringBoot与MongoDB深度整合及应用案例

SpringBoot与MongoDB深度整合及应用案例 在当今快速发展的软件开发领域&#xff0c;NoSQL数据库因其灵活性和可扩展性而变得越来越流行。MongoDB&#xff0c;作为一款领先的NoSQL数据库&#xff0c;以其文档导向的存储模型和强大的查询能力脱颖而出。本文将为您提供一个全方位…...

Redis模拟延时队列 实现日程提醒

使用Redis模拟延时队列 实际上通过MQ实现延时队列更加方便&#xff0c;只是在实际业务中种种原因导致最终选择使用redis作为该业务实现的中间件&#xff0c;顺便记录一下。 该业务是用于日程短信提醒&#xff0c;用户添加日程后&#xff0c;就会被放入redis队列中等待被执行发…...

vue项目中富文本编辑器的实现

文章目录 vue前端实现富文本编辑器的功能需要用到第三方库1. 安装包2.全局引入注册3.组件内使用4.图片缩放功能实现①安装包②注册并添加配置项③报错解决 vue前端实现富文本编辑器的功能需要用到第三方库 vue2使用vue-quill-editor&#xff0c;vue3使用vueup/vue-quill&#…...

nginx 配置lua执行shell脚本

1.需要nginx安装lua_nginx_module模块,这一步安装时&#xff0c;遇到一个坑&#xff0c;nginx执行configure时&#xff0c;一直提示./configure: error: unsupported LuaJIT version&#xff1b; ngx_http_lua_module requires LuaJIT 2.x。 网上一堆方法都试了&#xff0c;都…...

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建议指定版本下载&#xff0c;最新版本有兼容性问题 npm install cesium1.95.0 2.在node_models中找到cesium将此文件下的Cesium文件复制出来放在项目的静态资源public中或者static中&#xff0c;获取去github上去下载zip包放在本地也可以 3.在index.html中引…...

工程师 - 智能家居方案介绍

1. 智能家居硬件方案概述 智能家居硬件方案是实现家庭自动化的重要组件&#xff0c;通过集成各种设备来提升生活的便利性、安全性和效率。这些方案通常结合了物联网技术&#xff0c;为用户提供智能化、自动化的生活体验。硬件方案的选择直接影响到智能家居系统的性能、兼容性、…...

中小企业人事管理:SpringBoot框架高级应用

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;中小企业人事管理系统当然也不能排除在外。中小企业人事管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…...

嵌入式Linux驱动开发日记

目录 让我们从环境配置开始 目标平台 从Ubuntu开始 从交叉编译器继续 arm-linux-gnueabihf-gcc vscode 没学过ARM汇编 正文开始——速度体验一把 写一个链接脚本 写一个简单的Makefile脚本 使用正点原子的imxdownload下载到自己的SD卡上 更进一步的笔记和说明 从IM…...

迪杰特斯拉算法(Dijkstra‘s)

迪杰斯特拉算法&#xff08;Dijkstras algorithm&#xff09;是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger W. Dijkstra&#xff09;在1956年提出的&#xff0c;用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这个算法广泛应用于网络路由、地图导航等领…...

reids基础

数据结构类型 String setnx //设置key不存在&#xff0c;则添加成功 setex name 10 jack // key 10s失效&#xff0c;自动删除 hash hset hget list 按添加数据排序 lpush //左侧插入 rpush //右侧插入 set 不重复 sadd //添加…...

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为保障安全、提升效率的重要工具。然而&#xff0c;面对复杂多变的监控需求和跨区域、网络化的管理挑战&#xff0c;传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…...

SparkContext讲解

SparkContext讲解 什么是 SparkContext&#xff1f; SparkContext 是 Spark 应用程序的入口点&#xff0c;是 Spark 的核心组件之一。每个 Spark 应用程序启动时&#xff0c;都会创建一个 SparkContext 对象&#xff0c;它负责与集群管理器&#xff08;如 YARN、Mesos 或 Spa…...

MODBUS TCP转CANOpen网关

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

渗透测试---shell(4)脚本与用户交互以及if条件判断

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 目录 一、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问题

按官网提示是可以安装成功的&#xff0c;但是curl无法使用https下载&#xff0c;会造成下述语句执行失败 # 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&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 #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 个自然数&#xff0c;每个数均不超过 1500000000 (1.5*10^9 )。已知不相同的数不超过 10000 个&#xff0c;现在需要统计这些自然数各自出现的次数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 输入格式 包含 2 行&#xff1a; 第…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...