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

MongoDB | 零基础学习与Springboot整合ODM实现增删改查

目录

学习思路

学习上问题

官网下载与手册

开启服务

查看服务

原生软件

新建连接

观察界面

admin 数据库

config 数据库

local 数据库

总结

数据库相关

与关系性数据库对比

数据库基础操作

创建集合(表)

整合Springboot技术

初始化 jkglxt 数据库

添加 mongodb 依赖

编写 yaml配置文件

编写实体类

编写ODM映射

编写服务层接口

实现服务层接口

编写控制层

接口测试


学习思路

  • 0基础感受非关系性数据库的玩法与用处
  • 高层技术用不上,但基本使用与操作还是要有的

学习上问题

  • 网传 非关系性数据库需要搭配持久化使用
  • mongodb + srv,中的srv是什么?srv是资源记录的类型,那它有什么用处?
  • BSON 与 JSON 的区别什么? BSON基于JSON且有JSON没有的数据类型
  • Google 的 Protocol Buffer 是什么?
  • MongoDB的命名规范是什么?驼峰命名
  • MongoDB 有必要用ORM吗还是用ODM
  • mongoose ODM框架 Mongoose.js中文网、
  • 图片怎么存储?是不是使用ODM框架技术就不用直接创建数据,而是创建集合就行了?
  • 文件存储不得是用专业的吗?Amazon S3、Google Cloud Storage
  • mysql + mongodb 如何共同一起使用?
  • 第一种是将图片数据转化为bson二进制作为字典的键值对进行保存
  • 第二种是利用mongodb提供的GridFS进行保存

官网下载与手册

下载:Install MongoDB Community Kubernetes Operator | MongoDB

手册:What is MongoDB? - Database Manual v8.0 - MongoDB Docs

数据库工具:Download MongoDB Command Line Database Tools | MongoDB

开启服务

cmd - 输入 mongod 启动服务

mongod

查看服务

Ctrl+Shift + Esc - 服务

原生软件

打开MongoDB Compass

新建连接

点击 Add new connection - 配置连接的名称(只是名字) - 连接即可

观察界面

点击连接的 >_ 可以打开控制台,同时每个连接都有三个数据库localh中存在 startup_log 集合,他们有什么用处呢?

admin 数据库

admin 数据库是 MongoDB 的管理数据库,主要用于存储与数据库管理相关的数据和配置。以下是它的主要用途:

  • 用户和角色管理:存储用户和角色信息,包括权限设置。所有数据库的用户和角色信息都存储在 admin 数据库中。

  • 系统配置:存储一些全局的系统配置信息。

  • 运行时状态:存储数据库的运行时状态信息,例如服务器状态、性能指标等。

  • 访问控制:在启用身份验证的情况下,admin 数据库是用户身份验证的中心点。

config 数据库

config 数据库主要用于存储 MongoDB 集群的配置信息。以下是它的主要用途:

  • 分片集群配置:在分片集群中,config 数据库存储了分片的配置信息,例如分片的元数据、分片键的配置等。

  • 副本集配置:在副本集中,config 数据库存储了副本集的配置信息,例如成员信息、优先级等。

  • 集群状态:存储集群的运行状态信息,例如分片的当前状态、副本集的同步状态等。

local 数据库

local 数据库主要用于存储与单个 MongoDB 实例相关的本地数据。以下是它的主要用途:

  • 副本集操作日志:在副本集中,local 数据库存储了操作日志(Oplog),用于记录主节点的操作,以便从节点可以同步这些操作。

  • 本地配置:存储与本地实例相关的配置信息,例如本地的会话信息、临时数据等。

  • 本地状态:存储本地实例的运行状态信息,例如会话状态、临时数据等。

总结

  • admin 数据库:主要用于用户和角色管理、系统配置、运行时状态等。

  • config 数据库:主要用于分片集群和副本集的配置信息、集群状态等。

  • local 数据库:主要用于副本集的操作日志、本地配置、本地状态等。

数据库相关

与关系性数据库对比

特性MongoDB 集合关系型数据库表
数据存储文档(Document)行(Row)
数据结构动态模式(Dynamic Schema)固定模式(Static Schema)
数据类型BSON 格式,支持嵌套文档和数组固定的数据类型,如 INT、VARCHAR 等
索引可以在任意字段上创建索引可以在任意列上创建索引
事务支持支持多文档事务(从 MongoDB 4.0 开始)支持 ACID 事务
数据完整性依赖应用层逻辑依赖数据库约束(如外键)

数据库基础操作

安全性补充操作

# 暂停写入(允许叠多个锁)
db.fsyncLock()# 暂停写入
db.fsyncUnlock()

可以直接 使用数据库新的 myUser 数据库

# 使用/创建数据库
use myUser# 查询数据库
show dbs# 删除数据库
db.dropDatebase()

创建集合(表)

# 插入文档(记录)
db.myUser.insertOne({name:"chen"})
db.myUser.insertOne({name:"chen",password:"123456"}) # 上面那条同样也拥有password,不过是空值# 查询指定文档(支持模糊查询)
db.myUser.find([name:"chen"})# 查询所有文档
db.myUser.find()# 精准删除文档
db.myUser.delete({name:"chen"})# 删除集合内容
db.myUser.drop() 

整合Springboot技术

初始化 jkglxt 数据库

# 创建/使用数据库
use jkglxt# 添加集合(表)
db.createCollection("user_data")# 添加文档(记录)
db.user_data.insertOne({userId:34,userHeadImage:""})
db.user_data.insertOne({userId:35,userHeadImage:""})
db.user_data.insertOne({userId:36,userHeadImage:""})

添加 mongodb 依赖

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

编写 yaml配置文件

spring:data:mongodb:uri: mongodb://localhost:27017/jkglxtdatabase: jkglxt

编写实体类

package com.jkglxt.www.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.mongodb.core.mapping.Document;@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(collection = "user_data")
public class UserData {private String id;private int userId;private String userHeadImage;
}

编写ODM映射

这里有点像 ORM 的mybatis-plus一样,实体类与表类型固定死

package com.jkglxt.www.mapper;import com.jkglxt.www.entity.UserData;
import org.springframework.data.mongodb.repository.MongoRepository;public interface UserDateRepository extends MongoRepository<UserData, String> {
}

编写服务层接口

package com.jkglxt.www.service.servielmp;import com.jkglxt.www.entity.UserData;import java.util.List;public interface UserDataServiceImpl {// 所有获取用户信息public List<UserData> getUserData();
}

实现服务层接口

package com.jkglxt.www.service;import com.jkglxt.www.entity.UserData;
import com.jkglxt.www.mapper.UserDateRepository;
import com.jkglxt.www.service.servielmp.UserDataServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserDataService implements UserDataServiceImpl {private UserDateRepository userDateRepository;// 构造注入@Autowiredpublic UserDataService(UserDateRepository userDateRepository) {this.userDateRepository = userDateRepository;}@Overridepublic List<UserData> getUserData() {List<UserData>  userData = userDateRepository.findAll();return userData;}
}

编写控制层

package com.jkglxt.www.controller;import com.jkglxt.www.entity.UserData;
import com.jkglxt.www.service.servielmp.UserDataServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserDataController {private UserDataServiceImpl userDataService;@Autowiredprivate UserDataController(UserDataServiceImpl userDataService) {this.userDataService = userDataService;}// 查询用户@GetMapping("/getUserDataUrl")public List<UserData> getUserData() {List<UserData> userDataList = userDataService.getUserData();return userDataList;}
}

接口测试

我这里使用的是Apifox

感谢观看

http://www.xdnf.cn/news/636985.html

相关文章:

  • Windows鼠标掉帧测试与修复
  • Android 性能优化入门(三)—— ANR 问题分析
  • Day36打卡 @浙大疏锦行
  • C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
  • 11|省下钱买显卡,如何利用开源模型节约成本?
  • MIT 6.S081 2020Lab5 lazy page allocation 个人全流程
  • RabbitMQ 集群与高可用方案设计(一)
  • 通过Auto平台与VScode搭建远程开发环境(以Stable Diffusion Web UI为例)
  • 自训练NL-SQL模型
  • IS-IS报文
  • [特殊字符] UI-Trans:字节跳动发布的多模态 UI 转换大模型工具,重塑界面智能化未来
  • 以前端的角度理解 Kubernetes(K8s)
  • C++复习核心精华
  • Docker镜像与容器深度解析:从概念到实践的全面对比
  • PTA刷题笔记(难度预警!!!有详解)
  • 区块链可投会议CCF C--APSEC 2025 截止7.13 附录用率
  • leetcode 131. Palindrome Partitioning
  • Oracle 19c TFA工具的安装与使用详解
  • 【辰辉创聚生物】FGF信号通路相关蛋白:解码生命调控的关键枢纽
  • 第三十一天打卡
  • 医学写作供应商管理全流程优化
  • Github 今日热点 完全本地化的自主AI助手,无需API或云端依赖
  • 【JSON 】全面掌握JSON的相关知识
  • 上海医日健集团物联网专利技术领跑智慧药房赛道
  • C++编程单例模式详细解释---模拟一个网络配置管理器,负责管理和分发网络连接参数
  • 【OCCT+ImGUI系列】010-BRepMesh-网格化IncrementalMesh
  • 文本特征提取
  • GO 语言进阶之 进程 OS与 编码,数据格式转换
  • 【Leetcode 每日一题】2131. 连接两字母单词得到的最长回文串
  • 39.组合总和