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://www.mzph.cn/diannao/50672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

七夕特献:用代码编织爱情的浪漫,程序员的专属爱情证书生成器

文章目录 1. 背景介绍2. **为什么是爱情证书生成器&#xff1f;**3. **功能亮点**4. **技术实现**5. **如何获取&#xff1f;**6. 总结 1. 背景介绍 在这个数字化的时代&#xff0c;程序员们用代码编织世界&#xff0c;创造无限可能。七夕将至&#xff0c;一个充满古老传说和浪…

ElasticSearch核心之DSL查询语句实战

什么是DSL&#xff1f; Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。目前常用的框架查询方法什么的底层都是构建DSL语句实现的&#xff0c;所以你必…

Dockerfile指令详解和Docker操作命令

1.容器的特点&#xff1a;1&#xff09;自包含&#xff08;包括应用程序及其运行环境&#xff09;&#xff1b;2&#xff09;可移植&#xff1b;3&#xff09;相互隔离&#xff1b;4&#xff09;轻量级。 2.docker成为容器的事实标准在于&#xff1a;1&#xff09;在运行环境上…

【区块链】如何发行自己的加密货币到以太坊测试网络,remixIDE发行自己的数字货币

如何发行自己的加密货币到以太坊测试网络 环境 reminx在线编辑器&#xff1a;https://remix.ethereum.org/安装有小狐狸钱包插件&#xff08;MetaMask&#xff09; 如何部署代币&#xff1f; 创建一个名字叫做HelloMyToken.sol的文件。编写好智能合约&#xff0c;这边我要发…

文件包含漏洞--pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter &#xff1a;用于在读取作用和写入文件时进行过滤和转换操作。 作用1&#xff1a;利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…

Opencv学习项目4——手部跟踪

上一篇博客我们介绍了mediapipe库和对手部进行了检测&#xff0c;这次我们进行手部关键点的连线 代码实现 import cv2 import mediapipe as mpcap cv2.VideoCapture(1) mpHands mp.solutions.hands hands mpHands.Hands() mpDraw mp.solutions.drawing_utilswhile True:…

Flutter - 安卓一次打包不同包名的apk

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新&#xff0c;请前往github查看最新代码 有时为了方便测试&#xff0c;同一个app需要在一个手机上装两个&#xff0c;直接改包名的话比较麻烦&#xff0c;这时可以通过添加flavor进行多维度打包&#xff0c…

Flink入门(更新中)

目录 一、Flink 1.1 基本概念 1.1.1 flink简介 1.2 flink编程模版 1.3 常用概念 1.2.1 datastream 1.2.2 算子、Task 1.2.3 多流操作 1.2.6 时间语义 二、Flink编程实战(Java) 2.1 wordcount 一、Flink 1.1 基本概念 1.1.1 flink简介 1.图片介绍 性能&#xff1a…

OpenAI推出SearchGPT:革新搜索体验的新工具

引言 原文链接 在信息爆炸的时代&#xff0c;搜索引擎已经成为人们日常生活中不可或缺的工具。然而&#xff0c;传统的搜索引擎在理解复杂查询和提供准确答案方面仍有许多不足。为了解决这一问题&#xff0c;OpenAI与20240725推出了SearchGPT原型&#xff0c;将生成式AI与传统…

kafka源码阅读-ReplicaStateMachine(副本状态机)解析

概述 Kafka源码包含多个模块&#xff0c;每个模块负责不同的功能。以下是一些核心模块及其功能的概述&#xff1a; 服务端源码 &#xff1a;实现Kafka Broker的核心功能&#xff0c;包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络…

Vue常用指令及其生命周期

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.常用指令 1.1 v-bind 1.2 v-model 注意事项 1.3 v-on 注意事项 1.4 v-if / v-else-if / v-else 1.5 v-show 1.6 v-for 无索引 有索引 生命周期 定义 流程 1.常用指令 Vue当中的指令…

远程项目调试-informer2020

informer2020 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(原文&#xff09;Informer 是一个基于Transformer的模型&#xff0c;是为了应对长依赖关系而开发的。本文的主要主题是序列预测。序列预测可以在任何具有不断变化的数据的地方…

Linux——管理本地用户和组(详细介绍了Linux中用户和组的概念及用法)

目录 一、用户和组概念 &#xff08;一&#xff09;、用户的概念 &#xff08;二&#xff09;、组的概念 补充组 主要组 二、获取超级用户访问权限 &#xff08;一&#xff09;、su 命令和su -命令 &#xff08; 二&#xff09;、sudo命令 三、管理本地用户账户 &…

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…

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前&#xff0c;NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环&#xff0c;允许信息从一步传播到另一 步&#xff0c;使其成为对文本等序列数据进行建模的理想选择。如…

多模态大模型应用中的Q-Former是什么?

多模态大模型应用中的Q-Former是什么&#xff1f; Q-Former是一种新型的神经网络架构&#xff0c;专注于通过查询&#xff08;Query&#xff09;机制来改进信息检索和表示学习。在这篇博客中&#xff0c;我们将详细探讨Q-Former的工作原理、应用场景&#xff0c;并在必要时通过…

pyqt designer使用spliter

1、在designer界面需要使用spliter需要父界面不使用布局&#xff0c;减需要分割两个模块选中&#xff0c;再点击spliter分割 2、在分割后&#xff0c;再对父界面进行布局设置 3、对于两边需要不等比列放置的&#xff0c;需要套一层 group box在最外层进行分割

大数据学习之Flink基础

Flink基础 1、系统时间与时间时间 系统时间&#xff08;处理时间&#xff09; 在Sparksreaming的任务计算时&#xff0c;使用的是系统时间。 假设所用窗口为滚动窗口&#xff0c;大小为5分钟。那么每五分钟&#xff0c;都会对接收的数据进行提交任务. 但是&#xff0c;这里有…

GoogleCTF2023 Writeup

GoogleCTF2023 Writeup Misc NPC Crypto LEAST COMMON GENOMINATOR? Web UNDER-CONSTRUCTION NPC A friend handed me this map and told me that it will lead me to the flag. It is confusing me and I don’t know how to read it, can you help me out? Attach…