Spring Boot 与 MongoDB 整合指南

MongoDB

MongoDB 是一种基于文档的NoSQL数据库,以其高性能、高可用性和易扩展性而著称。它使用 BSON(类似 JSON 的二进制格式)来存储数据,提供了灵活的数据模型,使得开发者可以更轻松地存储和查询复杂的数据结构。将MongoDB与Spring Boot应用程序整合可以大大增强应用程序的数据处理能力。本指南将带你一步步完成如何通过Docker或Flapdoodle嵌入式MongoDB库来设置MongoDB与Spring Boot的整合。

附上我的博客:Spring Boot 与 MongoDB 整合指南
以及相关参考:
MongoDB: The Developer Data Platform | MongoDB
MongoDB 教程 | 菜鸟教程 (runoob.com)

MongoDB 的主要特点

  1. 文档存储:MongoDB 使用文档(Document)作为数据的基本存储单位。一个文档是一个键值对的集合,类似于 JSON 对象。这种存储方式使得数据的表示更加直观和灵活。
  2. 灵活的数据模型:与传统的关系型数据库不同,MongoDB 允许在一个集合(Collection)中存储具有不同结构的文档。这种灵活性使得应用程序能够更快速地适应变化。
  3. 高性能:MongoDB 提供高效的查询性能和写入速度,能够处理大量的数据和高并发的操作。
  4. 高可用性和自动分片:MongoDB 支持复制集(Replica Set)和分片(Sharding),从而实现数据的高可用性和水平扩展。复制集提供了数据的冗余和故障切换能力,而分片允许将数据分布在多个服务器上以实现负载均衡。
  5. 丰富的查询语言:MongoDB 提供了强大的查询语言,可以通过条件、排序、聚合等多种方式来查询和操作数据。还支持全文搜索、地理空间查询等高级功能。
  6. 事务支持:从 MongoDB 4.0 开始,支持多文档 ACID 事务,使得开发者可以在多个文档之间进行原子性操作。

使用场景

  • 内容管理系统:灵活的数据模型使得 MongoDB 能够轻松存储和管理不同类型的内容。
  • 实时分析:高性能和丰富的查询功能使得 MongoDB 成为实时数据分析和处理的理想选择。
  • 物联网(IoT)应用:可以高效地处理来自各种设备的大量数据。
  • 移动应用和游戏:能够处理高并发的用户请求,并提供快速的响应时间。

SpringBoot + MongoDB

添加MongoDB依赖

首先,你需要在pom.xml文件中添加MongoDB相关的依赖。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
</dependencies>

使用Docker启动MongoDB

如果你选择使用Docker启动MongoDB,可以按照以下步骤进行操作:

  1. 确保已安装Docker。
  2. 使用以下命令启动MongoDB容器:
docker run -p 27017:27017 -d mongo:latest

配置文件

在Spring Boot的application.yml文件中配置MongoDB连接:

spring:data:mongodb:host: localhostport: 27017database: test

示例

与 初识Apache Cassandra:从基础到实践 中的代码基本相同,可跳转至文章阅读第五节。

实体类

package org.mongodbdemo.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Data
@Document
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true)
public class User {@Idprivate String id;private String name;private String email;
}

存储库接口

package org.mongodbdemo.repo;import org.mongodbdemo.pojo.User;
import org.springframework.data.repository.CrudRepository;public interface UserRepo extendsCrudRepository<User, String>{
}

服务类

package org.mongodbdemo.service;
import org.mongodbdemo.pojo.User;
import org.mongodbdemo.repo.UserRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;@Service
public class UserService {@Autowiredprivate UserRepo userRepo;public User saveUser(User user) {return userRepo.save(user);}public Optional<User> getUserById(String id) {return userRepo.findById(id);}public Iterable<User> getAllUsers() {return userRepo.findAll();}public void deleteUserById(String id) {userRepo.deleteById(id);}
}

控制类

package org.mongodbdemo.controller;import org.mongodbdemo.pojo.User;
import org.mongodbdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.Optional;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;// 创建用户@PostMappingpublic User createUser(@RequestBody User user) {return userService.saveUser(user);}// 获取用户@GetMapping("/{id}")public Optional<User> getUser(@PathVariable String id) {return userService.getUserById(id);}// 获取所有用户@GetMappingpublic Iterable<User> getAllUsers() {return userService.getAllUsers();}// 删除用户@DeleteMapping("/{id}")public void deleteUser(@PathVariable String id) {userService.deleteUserById(id);}
}

测试结果

增加

查询

删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269117.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

夯实数字经济的“新基建”-基于大数据与区块链技术的新型基础设施

随着我国数据市场的蓬勃发展&#xff0c;构建契合数据特性、加速数据流通与价值释放的新型数据基础设施变得尤为关键。数字基础设施作为数字经济蓬勃发展的基石&#xff0c;其完善与否直接关系到数据能否有效存储、顺畅流通及高效利用&#xff0c;进而促进数据资源向数据资产的…

Python 教程(四):Python运算符合集

目录 专栏列表前言1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 成员运算符7. 身份运算符总结 在前三篇教程中&#xff0c;我们学习了 Python 的基本语法和数据结构以及字符串的特性。本篇教程&#xff0c;我们将深入探讨 Python 中的运算符合集。 专栏…

【docker】部署证书过期监控系统mouday/domain-admin

证书过期了再去部署证书容易被骂&#xff0c;就找了一个开源的证书过期系统来部署一下 过程 官方文档&#xff1a;https://domain-admin.readthedocs.io/zh-cn/latest/manual/install.html#docker 直接下载镜像是超时的&#xff0c;切换一下文档推荐的镜像源 新建docker配置…

ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?

ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH? 目录 ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH? 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/61780…

Linux安装TrueNAS(网络附加存储)教程 –第1部分

TrueNAS CORE&#xff08;原名FreeNAS&#xff09;是一款流行的存储系统&#xff0c;可帮助您构建自己的高质量存储设置&#xff0c;而无需支付软件费用。您可以将其安装在计算机硬件或虚拟机 (VM) 上&#xff0c;以获得开源存储的好处。 您可以在家中、办公室或数据中心使用T…

vue element-ui日期控件传参

前端&#xff1a;Vue element-ui <el-form-item label"过期时间" :rules"[ { required: true, message: 请选择过期时间, trigger: blur }]"><el-date-picker v-model"form.expireTime" type"date" format"yyyy-MM-dd&…

LoRaWAN网络中的chirpstack

目录 一、chirpstack介绍 二、网关与chirpstack之间的通信 三、NS与AS之间的通信 1、Protobuf 2、gRPC 一、chirpstack介绍 ChirpStack 是一个开源的 LoRaWAN 网络服务器&#xff0c;可用于 设置私有或公共 LoRaWAN 网络。ChirpStack 提供了一个 Web 界面 用于管理网关、设…

重塑与整合奖励机制以对齐大模型

人工智能咨询培训老师叶梓 转载标明出处 大模型的对齐问题&#xff0c;即如何使模型的输出倾向于具备期望的属性&#xff08;如有帮助、无害、真实或创造性&#xff09;&#xff0c;是当前人工智能领域的热点问题。来自芝加哥大学、Google Research、Google DeepMind 和斯坦福大…

搜索引擎搜索功能(三)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com)https://gitee.com/yxuan-wang/submit/tree/master/SearchEngine 搜索功能&#xff1a; 对用户输入的词语&#xff0c;短语或句子进行分词&#xff0c;然后将分词后的结果进行查询&#xff0c;得到多个数组&#x…

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员&#xff0c;对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性&#xff1a;public&#xff08;公有的&…

ubuntu22.04 安装 NVIDIA 驱动以及CUDA

目录 1、事前问题解决 2、安装 nvidia 驱动 3、卸载 nvidia 驱动方法 4、安装 CUDA 5、安装 Anaconda 6、安装 PyTorch 1、事前问题解决 在安装完ubuntu之后&#xff0c;如果进入ubuntu出现黑屏情况&#xff0c;一般就是nvidia驱动与linux自带的不兼容&#xff0c;可以通…

[ECharts] There is a chart instance already initialized on the dom. 已存在图表,渲染重复

报错&#xff1a;已存在图表&#xff0c;渲染重复 解决: 在合适的时机执行 dispose 方法即可 // echarts 全局存入 实例 let myChart: any;// 在你的 initChart 初始化 Echarts 方法中 先执行清理方法 const initChart () > {// 执行清理方法然后初始化if(myChart){cons…

MATLAB怎么实现多条曲线共用一个图例

y1 sin(x); y2 3*sin(x); y3 cos(x); y4 3*cos(x); 例子&#xff1a;如果我们有4条曲线&#xff0c;分布是cos类和sin类&#xff0c;我们的图例就想区分是cos类还是sin类。 第一步&#xff08;关键步骤&#xff09; 我们要把我们所需要的类别曲线先画一遍&#xff0c; …

揭秘Django与Neo4j:构建智能知识图谱的终极指南

揭秘Django与Neo4j:构建智能知识图谱的终极指南 前言 图是一种用于对象之间的成对关系进行建模的数学结构。 它由两个主要元素组成:节点和关系。 节点:节点可以看作是传统数据库中的记录。每个节点代表一个对象或实体,例如一个人或一个地方。节点按标签分类,这有助于根…

【SpringBoot】1 Gitee

本项目 Gitee 地址&#xff1a;https://gitee.com/Lin_DH/system idea中可能装个gitee的插件&#xff0c;这样操作起来比较方便。 1&#xff09;登录 Gitee 官网&#xff08;https://gitee.com/&#xff09;&#xff0c;新建仓库。 2&#xff09;复制新建的 Gitee 仓库地址&am…

Intellij IDEA多模块分组 实现move to group

新版本idea&#xff0c;没有了move to group的功能&#xff0c;导致模块很多的时候不能分组。2018版本有。 这个分组是虚拟的&#xff0c;不会在磁盘中实际存在。 要实现这个功能&#xff0c;只需要改modules.xml即可。 步骤 1. 找到配置文件 .idea目录下的moudules.xml 2.…

2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享

初赛A&#xff1a;烟草营销案例数据分析 AB题综合难度不大&#xff0c;难度可以视作0.4个国赛&#xff0c;题量可以看作0.35个国赛题量。适合于国赛前队伍练手&#xff0c;队伍内磨合。竞赛获奖率50%&#xff0c;八月底出成绩&#xff0c;参赛人数3000队左右。本文将为大家进行…

古训如金,指引前行(感受古人的智慧与洞见)

文章目录 古语佳句我与我周旋久,宁作我。花看半开,酒饮微醉,毋意,毋必,毋固,毋我。居逆境中,周身皆针砭药石,好而知其恶,恶而知其美。天下皆知取之为取,而莫知与之为取。喜时之言多失信,怒时之言多失体。仁者如射,射者正己而后发。私视使目盲,达人撒手悬崖,俗子沉…

【React】useEffect 钩子详解

文章目录 一、useEffect 概念二、useEffect 的基本用法1. 无依赖项2. 空依赖项数组3. 带依赖项的 useEffect 三、useEffect 的常见应用场景1. 数据获取2. 订阅与清除3. 动画与定时器 四、useEffect 的进阶用法1. 多个 useEffect2. 条件执行副作用 五、注意事项 useEffect 是 Re…

微信公众号获取用户openid(PHP版,snsapi_base模式)

微信公众号获取用户openid的接口有2个&#xff1a;snsapi_base、snsapi_userinfo 详情见微信公众号开发文档&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 本文介绍用PHP方式调用snsapi_base接口获取微信用户…