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

目录

学习思路

学习上问题

官网下载与手册

开启服务

查看服务

原生软件

新建连接

观察界面

[admin 数据库](#admin 数据库)

[config 数据库](#config 数据库)

[local 数据库](#local 数据库)

总结

数据库相关

与关系性数据库对比

数据库基础操作

创建集合(表)

整合Springboot技术

[初始化 jkglxt 数据库](#初始化 jkglxt 数据库)

[添加 mongodb 依赖](#添加 mongodb 依赖)

[编写 yaml配置文件](#编写 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 启动服务

bash 复制代码
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 数据库

bash 复制代码
# 使用/创建数据库
use myUser

# 查询数据库
show dbs

# 删除数据库
db.dropDatebase()

创建集合(表)

bash 复制代码
# 插入文档(记录)
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 数据库

java 复制代码
# 创建/使用数据库
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配置文件

bash 复制代码
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/jkglxt
      database: jkglxt

编写实体类

java 复制代码
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一样,实体类与表类型固定死

java 复制代码
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> {
}

编写服务层接口

java 复制代码
package com.jkglxt.www.service.servielmp;

import com.jkglxt.www.entity.UserData;

import java.util.List;

public interface UserDataServiceImpl {
    // 所有获取用户信息
    public List<UserData> getUserData();
}

实现服务层接口

java 复制代码
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;

    // 构造注入
    @Autowired
    public UserDataService(UserDateRepository userDateRepository) {
        this.userDateRepository = userDateRepository;
    }

    @Override
    public List<UserData> getUserData() {
        List<UserData>  userData = userDateRepository.findAll();
        return userData;
    }
}

编写控制层

java 复制代码
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;

    @Autowired
    private UserDataController(UserDataServiceImpl userDataService) {
        this.userDataService = userDataService;
    }

    // 查询用户
    @GetMapping("/getUserDataUrl")
    public List<UserData> getUserData() {
        List<UserData> userDataList = userDataService.getUserData();
        return userDataList;
    }
}

接口测试

我这里使用的是Apifox

感谢观看

相关推荐
小陈工19 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花1 天前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸1 天前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain1 天前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希1 天前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神1 天前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员1 天前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java1 天前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿1 天前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴1 天前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存