• 【SpringBoot整合NoSql】-----MongoDB篇


    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获,也请大家多多支持。
    专栏地址:SpringBoot专栏
    本文涉及的代码都已放在gitee上:gitee地址
    如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
    专栏汇总:专栏汇总

    SpringBoot整合MongoDB

    ​ 使用Redis技术可以有效的提高数据访问速度,但是由于Redis的数据格式单一性,无法操作结构化数据,当操作对象型的数据时,Redis就显得捉襟见肘。在保障访问速度的情况下,如果想操作结构化数据,看来Redis无法满足要求了,此时需要使用全新的数据存储结束来解决此问题,本节讲解springboot如何整合MongoDB技术。

    ​ MongoDB是一个开源、高性能、无模式的文档型数据库,它是NoSQL数据库产品中的一种,是最像关系型数据库的非关系型数据库。

    ​ 上述描述中几个词,其中对于我们最陌生的词是无模式的。什么叫无模式呢?简单说就是作为一款数据库,没有固定的数据存储结构,第一条数据可能有A、B、C一共3个字段,第二条数据可能有D、E、F也是3个字段,第三条数据可能是A、C、E3个字段,也就是说数据的结构不固定,这就是无模式。有人会说这有什么用啊?灵活,随时变更,不受约束。基于上述特点,MongoDB的应用面也会产生一些变化。以下列出了一些可以使用MongoDB作为数据存储的场景,但是并不是必须使用MongoDB的场景:

    • 淘宝用户数据
      • 存储位置:数据库
      • 特征:永久性存储,修改频度极低
    • 游戏装备数据、游戏道具数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合、修改频度较高
    • 直播数据、打赏数据、粉丝数据
      • 存储位置:数据库、Mongodb
      • 特征:永久性存储与临时存储相结合,修改频度极高
    • 物联网数据
      • 存储位置:Mongodb
      • 特征:临时存储,修改频度飞速

    安装

    ​ windows版安装包下载地址:https://www.mongodb.com/try/download

    ​ 下载的安装包也有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行,本课程采用解压缩zip文件进行安装。

    ​ 解压缩完毕后会得到如下文件,其中bin目录包含了所有mongodb的可执行命令

    image-20220224111306933

    ​ mongodb在运行时需要指定一个数据存储的目录,所以创建一个数据存储目录,通常放置在安装目录中,此处创建data/db的目录用来存储数据,具体如下

    image-20220224111053408

    image-20220623114659997

    ​ 如果在安装的过程中出现了如下警告信息,就是告诉你,你当前的操作系统缺少了一些系统文件,这个不用担心。

    在这里插入图片描述

    ​ 根据下列方案即可解决,在浏览器中搜索提示缺少的名称对应的文件,并下载,将下载的文件拷贝到windows安装目录的system32目录下,然后在命令行中执行regsvr32命令注册此文件。根据下载的文件名不同,执行命令前更改对应名称。

    regsvr32 vcruntime140_1.dll
    
    • 1

    启动服务器

    mongod --dbpath=..\data\db
    
    • 1

    ​ 启动服务器时需要指定数据存储位置,通过参数–dbpath进行设置,可以根据需要自行设置数据存储路径。默认服务端口27017。

    启动客户端

    mongo --host=127.0.0.1 --port=27017
    
    • 1

    基本操作

    ​ MongoDB虽然是一款数据库,但是它的操作并不是使用SQL语句进行的,因此操作方式各位小伙伴可能比较陌生,好在有一些类似于Navicat的数据库客户端软件,能够便捷的操作MongoDB,先安装一个客户端,再来操作MongoDB。

    ​ 同类型的软件较多,本次安装的软件时Robo3t,Robot3t是一款绿色软件,无需安装,解压缩即可。解压缩完毕后进入安装目录双击robot3t.exe即可使用。

    在这里插入图片描述

    ​ 打开软件首先要连接MongoDB服务器,选择【File】菜单,选择【Connect…】

    image-20220224115202422

    ​ 进入连接管理界面后,选择左上角的【Create】链接,创建新的连接设置

    在这里插入图片描述

    ​ 如果输入设置值即可连接(默认不修改即可连接本机27017端口)

    image-20220224115300266

    ​ 连接成功后在命令输入区域输入命令即可操作MongoDB。

    ​ 创建数据库:在左侧菜单中使用右键创建,输入数据库名称即可

    ​ 创建集合:在Collections上使用右键创建,输入集合名称即可,集合等同于数据库中的表的作用

    新增文档:(文档是一种类似json格式的数据,初学者可以先把数据理解为就是json数据)

    db.集合名称.insert/save/insertOne(文档)
    
    • 1

    删除文档:

    db.集合名称.remove(条件)
    
    • 1

    修改文档:

    db.集合名称.update(条件,{操作种类:{文档}})
    
    • 1

    查询文档:

    基础查询
    查询全部:		   db.集合.find();
    查第一条:		   db.集合.findOne()
    查询指定数量文档:	db.集合.find().limit(10)					//查10条文档
    跳过指定数量文档:	db.集合.find().skip(20)					//跳过20条文档
    统计:			  	db.集合.count()
    排序:				db.集合.sort({age:1})						//按age升序排序
    投影:				db.集合名称.find(条件,{name:1,age:1})		 //仅保留name与age域
    
    条件查询
    基本格式:			db.集合.find({条件})
    模糊查询:			db.集合.find({域名:/正则表达式/})		  //等同SQL中的like,比like强大,可以执行正则所有规则
    条件比较运算:		   db.集合.find({域名:{$gt:值}})				//等同SQL中的数值比较操作,例如:name>18
    包含查询:			db.集合.find({域名:{$in:[值1,值2]}})		//等同于SQL中的in
    条件连接查询:		   db.集合.find({$and:[{条件1},{条件2}]})	   //等同于SQL中的and、or
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ​ 操作示例:

    show databases;
    
    //使用hashnode数据库,如果没有则进行创建
    use hashnode;
    //创建集合book
    db.createCollection('book');
    db.createCollection('book2');
    
    
    //查询所有数据方式1
    db.getCollection('book').find({});
    //查询所有数据方式2
    db.book.find()
    //条件查询
    db.book.find({type:"springboot"})
    
    //插入一条数据
    db.book.insertOne({"name":"springboot"});
    //插入数据,并添加一个属性
    db.book.insertOne({"name":"springboot",type:"springboot"});
    
    //条件删除
    db.book.deleteOne({type:"springboot"})
    //全部删除
    db.book.deleteMany({})
    
    //更新
    db.book.updateOne({"name":"springboot"},{$set:{name:"springboot2"}})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    整合

    ​ 使用springboot整合MongDB该如何进行呢?其实springboot为什么使用的开发者这么多,就是因为他的套路几乎完全一样。导入坐标,做配置,使用API接口操作。整合Redis如此,整合MongoDB同样如此。

    ​ 第一,先导入对应技术的整合starter坐标

    ​ 第二,配置必要信息

    ​ 第三,使用提供的API操作即可

    ​ 下面就开始springboot整合MongoDB,操作步骤如下:

    步骤①:导入springboot整合MongoDB的starter坐标

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    ​ 上述坐标也可以在创建模块的时候通过勾选的形式进行选择,同样归属NoSQL分类中

    在这里插入图片描述

    步骤②:进行基础配置

    spring:
      data:
        mongodb:
          uri: mongodb://localhost/hashnode
    
    • 1
    • 2
    • 3
    • 4

    ​ 操作MongoDB需要的配置与操作redis一样,最基本的信息都是操作哪一台服务器,区别就是连接的服务器IP地址和端口不同,书写格式不同而已。

    步骤③:使用springboot整合MongoDB的专用客户端接口MongoTemplate来进行操作

    package com.hashnode;
    
    import com.hashnode.pojo.Book;
    import com.hashnode.pojo.Book2;
    import com.hashnode.pojo.Book3;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.mongodb.core.MongoTemplate;
    
    import java.util.List;
    
    
    @SpringBootTest
    class Springboot0016MongodbTestApplicationTests {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
    
        @Test
        void contextLoads() {
    //        Book book = new Book(1,"aaa","bbb","ccc");
    //        Book2 book = new Book2(1,"aaa","bbb","ccc");
            Book3 book = new Book3(1,"aaa","bbb","ccc");
    
            //默认的集合是类名换成小写,如果没有相应的表会自动创建
            mongoTemplate.save(book);
        }
    
        @Test
        void findAll(){
            List<Book> all = mongoTemplate.findAll(Book.class);
            System.out.println(all);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    ​ 整合工作到这里就做完了,感觉既熟悉也陌生。熟悉的是这个套路,三板斧,就这三招,导坐标做配置用API操作,陌生的是这个技术,里面具体的操作API可能会不熟悉,有关springboot整合MongoDB我们就讲到这里。有兴趣可以继续学习MongoDB的操作,然后再来这里通过编程的形式操作MongoDB。

    总结

    1. springboot整合MongoDB步骤
      1. 导入springboot整合MongoDB的starter坐标
      2. 进行基础配置
      3. 使用springboot整合MongoDB的专用客户端接口MongoTemplate操作
  • 相关阅读:
    Ryght 在 Hugging Face 专家助力下赋能医疗保健和生命科学之旅
    PTA 7-20 xrf的镜子碎了?
    Android网络操作与流行框架(三)——AsyncTask异步任务
    python面试题——版本管理工具GIT(二)
    17、Resources——资源
    CFdiv2-Beautiful Mirrors-(期望)
    浏览器工作原理与实践学习笔记(一)宏观视角下的浏览器
    (附源码)ssm天天超市购物网站 毕业设计
    ZCMU--2104: 师座操作系统
    37~python 字符串
  • 原文地址:https://blog.csdn.net/Learning_xzj/article/details/125433255