当前位置: 首页 > 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

感谢观看

相关文章:

  • docker部署XTdrone
  • 如何确定是不是一个bug?
  • HDFS存储原理与MapReduce计算模型
  • 0基础 Git 代码操作
  • Python实例题:Python打造漏洞扫描器
  • 【Linux 学习计划】-- 冯诺依曼体系 | 操作系统的概念与定位,以及其如何管理软件
  • svn: E155017: Checksum mismatch while updating 校验错误的解决方法
  • whisper相关的开源项目 (asr)
  • leetcode 17. Letter Combinations of a Phone Number
  • Ubuntu 24.04部署安装Honeyd蜜罐
  • 大学之大:浦项科技大学2025.5.25
  • 塔能科技:以多元技术赋能全行业能耗节能转型
  • STM32 输出比较输出PWM控制呼吸灯小实验(2种实现 铁头山羊与江协科技)
  • 掌阅iReader新形态墨水屏Tango发布:科技与美学共舞,开启灵动阅读新体验
  • HTTP请求全链路剖析:请求头、XHR与状态码的实战指南
  • 8.Java 8 日期时间处理:从 Date 的崩溃到 LocalDate 的优雅自救​
  • ADS学习笔记(二) 交流小信号仿真
  • 2025最新智能优化算法:野燕麦优化算法(Animated Oat Optimization Algorithm, AOO),MATLAB代码
  • HTTP协议版本的发展(HTTP/0.9、1.0、1.1、2、3)
  • 黑马点评-分布式锁Lua脚本
  • 优美女人女性网站模版/手机百度app免费下载
  • 哪些网站可以做易拉宝/免费制作网站平台
  • 设计室内效果图设计/seo免费诊断
  • web项目网站开发流程怎么写/提升关键词排名seo软件
  • 中国做的网站国外能打开吗/做网页多少钱一个页面
  • 定制礼品公司/湖南seo快速排名