MongoDB微服务部署

一、安装MongoDB

1.在linux中拉去MongoDB镜像文件

docker pull mongo:4.4.18

2.

2.创建数据挂载目录

linux命令创建

命令创建目录:

mkdir -p /usr/local/docker/mongodb/data

可以在sshclient工具查看是否创建成功。

 进入moogodb目录,给data赋予权限777

cd /usr/local/docker/mongodb

chmod 777 data

我们看看data的权限是否赋予成功,权限赋予成功。

ls -l

3.启动mongodb

--privileged:以真正的有权限方式启动

MONGO_INITDB_ROOT_USERNAME:设置账户

MONGO_INITDB_ROOT_PASSWORD:设置密码

这里用户设置的是root,密码是123456

docker run -d \
  --name mongodb \
  --privileged \
  -p 27017:27017 \
  -v /usr/local/docker/mongodb/data:/data/db \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  mongo:4.4.18 mongod --auth

查看一下mongodb是否启动成功

docker ps

有mongodb,说明启动成功。 

二.登录验证mongodb安装成功

1.进入容器

docker exec -it mongodb /bin/bash

 2.查看版本

mongo --version

3.以root用户登录mongodb

mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin" 

-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库

4.展示所有的数据库

show dbs

 

5.切换到dz14b数据库

use dz14b

6.创建一个用户

用户名是user01,密码是123456,角色是读写角色,作用在dz14b数据库上

db.createUser({user:"user01", pwd:"123456",roles: [{role:"readWrite", db:"dz14b"}]})

7.查看所有的用户数据 

show users

 

8.退出mongodb数据库和退出mongodb容器

exit

9.再次进入容器

以mongo命令进入,进入到dz14b数据库中

docker exec -it mongodb mongo dz14b

10.查看当前在那个数据库 

db

11.展示数据库

发现没有其他数据库,我们已经再dz14b了,所以查询不到其他数据库

show dbs

12.授权

db.auth("user01", "123456")

13.查看数据库

发现没有,授权影响不到用户的作用范围

show dbs

14.展示用户数据

show users

15.插入一个文档 

其实这个操作实际上是在navicat进行创建的

向dz(dz自定义的名字)集合插入了一个文档,数据是inser方法的参数。对照sql理解:向dz表插入一条记录

db.dz.insert({name:"zhangsan"})

 

16.查询dz集合下所有的数据

db.dz.find()

 

17.删除用户的指令

db.system.users.remove({user:"user01"})

三.与Navicat连接

填完后点左下角的测试连接

连接名自己取,我这里取得是dz14b

 

向其中插入数据 

db.dz.insert({name:"lisi", age:20});
db.dz.save({name:"wangwu", age:25});
db.dz.save({name:"zhangsan", age:25});
db.dz.insert({name:"波波", age:20});
db.dz.save({name:"阿瑟东", age:25});
db.dz.save({name:"阿松i阿瑟东", age:25});
db.dz.insert({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})
db.dz.save({_id:ObjectId("63e4c8bdd20e7cc75a36a700"),name:"zhangsan1",age:20})

查看数据

四.与idea项目整合

1.创建idea的maven项目

 

选择右下角的自动auto.

2.导入依赖

在pom.xml文件里添加依赖

   
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.创建并修改配置文件

database是你创建数据库的连接名:我设置的是dz14b.

host是你虚拟机的ip

username和password和本博客目录中的二的第6小点的创建用户相对应。

4.创建实体类

package com.jr.entry;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.stereotype.Component;
@NoArgsConstructor
@AllArgsConstructor
@Component
@Data
public class Emp {
    @Id
private String id;
    private Integer empno;
    private  String ename;
    private  String job;
    private  Integer mgr;
    private  Double sal;
    private  Double comm;
    private  String hiredate;
    private  Integer deptno;
}

5.创建接口

package com.jr.dao;

import com.jr.entry.Emp;

import java.util.ArrayList;

public interface EmpDao {
    void insert(Emp emp);
    void delete(String id);
    void  delete(Emp emp);
    void update(Emp emp);
    Emp findEmp(String empno);
    ArrayList<Emp> findEmps(Emp emp);
}

6.创建实现类

package com.jr.dao.impl;

import com.jr.dao.EmpDao;
import com.jr.entry.Emp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;

@Repository//接口实现类的
public class EmpDapImpl  implements EmpDao {
@Autowired
private MongoTemplate mongoTemplate;


    @Override
    public void insert(Emp emp) {
       
    }

    @Override
    public void delete(String id) {
       

    }

    @Override
    public void delete(Emp emp) {
       
    }

    @Override
    public void update(Emp emp) {
        

    }

    @Override
    public Emp findEmp(String id) {

    }

    @Override
    public ArrayList<Emp> findEmps(Emp emp) {
       
    }
}

7.创建启动类

package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMain {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class,args);
    }
}

8.创建测试类

package com.jr.test;

import com.SpringBootMain;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = SpringBootMain.class)
@Slf4j
public class MongoTest {
   
}

 五.四种操作

1.增加操作

实现类EmpDapImpl中:

 @Override
    public void insert(Emp emp) {
        mongoTemplate.insert(emp);
    }

测试类MongoTest中:

@Test//添加
    public void test() {
        Emp emp = new Emp();
        emp.setEname("root");
        emp.setSal(7000.0);
        empDao.insert(emp);
        log.info("添加成功");
    }

 

启动测试类:

控制台显示添加成功 

Emp表不是自己创建的,是自动创建的。

 2.删除操作

2.1第一种

实现类EmpDapImpl中:

 @Override
    public void delete(String id) {
          //  第一种删除(思路),先查在删。,根据主键去删
        Emp emp=mongoTemplate.findById(id,Emp.class);
        mongoTemplate.remove( emp);

    }

测试类MongoTest中:

这id得和你数据库得对应

@Test
    //第一种主键删除
    public void test1() {
        empDao.delete("66f4ca24508a092655f6270d");//这id得和你数据库得对应
        log.info("删除成功");
    }

控制台显示删除成功 

 

2.2第二种删除

实现类EmpDapImpl中:

@Override
    public void delete(Emp emp) {
        //第二种根据非主键删除,假如根据名字去删
        Query query = new Query();
        query.addCriteria(Criteria.where("ename").is(emp.getEname()));
        mongoTemplate.remove(query, Emp.class);
    }

 测试类MongoTest中:

@Test//第二种非主键删除
    public void test2() {
        Emp emp = new Emp();
        emp.setEname("第二个root");
        empDao.delete(emp);
        log.info("第二次删除成功");
    }

首先我们得添加一个数据,因为第一个删完了(。。。。。。),然后再执行删除操作。

执行后的结果:

3.修改操作 

实现类EmpDapImpl中:_id,ename,job对应你数据库的列名,这里的_id比较特殊。

@Override
    public void update(Emp emp) {
        Query query=new Query();
        query.addCriteria((Criteria.where("_id").is(emp.getId())));
        Update update = new Update();
        update.set("ename", emp.getEname());
        update.set("job",emp.getJob());
        mongoTemplate.updateMulti(query, update, Emp.class);

    }

 测试类MongoTest中:

id是你数据库某条数据的_id

@Test//修改
    public void test3() {
        Emp emp = new Emp();
        emp.setId("66f4d246dca21e696578d79e");
        emp.setEname("修改操作");
        emp.setJob("开发");
        empDao.update(emp);
        log.info("修改成功");
    }

 

 启动

启动结果

修改前:

修改后:

4.查询操作 

实现类EmpDapImpl中:

 @Override
    public Emp findEmp(String id) {

        return  mongoTemplate.findById(id,Emp.class);
    }

 测试类MongoTest中:

@Test//查询
    public void test4() {
        Emp byId = empDao.findEmp("66f4d246dca21e696578d79e");
        System.out.println(byId);
    }

启动测试:

现在表中的数据

 

查出来的结果:

六.我的项目结构 

到这就基本结束了,这里展示我的项目结构供大家参考,大家加油。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/886108.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IT新秀系列:Erlang语言的兴起原因分析和前景观望

Erlang语言的兴起原因 Erlang 是一种通用并发编程语言和运行环境&#xff0c;最早由瑞典电信公司爱立信&#xff08;Ericsson&#xff09;在1986年开发&#xff0c;旨在处理高度并发、分布式和容错系统。Erlang 的主要设计目标是创建一个能够在电信系统中实现高可用性和实时性能…

Linux:LCD驱动开发

目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 ​编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…

【经典机器学习算法】谱聚类算法及其实现(python)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 前…

图文深入理解Oracle Network配置管理(一)

List item 本篇图文深入介绍Oracle Network配置管理。 Oracle Network概述 Oracle Net 服务 Oracle Net 监听程序 <oracle_home>/network/admin/listener.ora <oracle_home>/network/admin/sqlnet.ora建立网络连接 要建立客户机或中间层连接&#xff0c;Oracle…

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结&#xff1a;在项目当中第一、第二种方法搭配使用&#xff0c;第三种冲突风险非常大&#xff0c;仅适合练习使用。 四、C输入&输出 五、缺省…

DRF笔记

参考资料 http://www.yuan316.com/post/DRF/ 全站最牛逼的DRF&#xff08;Django-restframework&#xff09;&#xff0c;没有之一&#xff01; 零、创建django项目 项目每次处相当于执行命令&#xff1a;django-admin startproject xxx 应用名称处&#xff1a;python manage.…

调用智谱AI,面试小助手Flask简单示例

文章目录 1.接入AI获取API密钥Python代码 2.小助手的实现流程3.Flask应用示例Python文件.pyindex.html运行Flask应用地址栏输入 http://localhost:5000/ 1.接入AI 获取API密钥 在智谱AI的官方网站上注册&#xff0c;右上角点击API密钥&#xff0c;新建并复制一个 API Key&…

奔驰EQS450suv升级增强AR抬头显示HUD案例分享

以下是奔驰 EQS450 SUV 升级增强版 AR 抬头显示的一般改装案例步骤及相关信息&#xff1a; 配件&#xff1a;通常包括显示屏、仪表模块、饰板等。 安装步骤&#xff1a; 1. 拆下中控的仪表。 2. 在仪表上预留位置切割出合适的孔位&#xff0c;用于安装显示器。 3. 将显示器…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找&#xff0c;每次找到可到达的最远位置&#xff0c;就可以在线性时间内得到最少的跳跃次数。 例如&#xff0c;对于数组 [2,3,1,2,4,2,3]&#xff0c;初始位置是下标 0&#xff0c;从下标 0 出发&#xff0c;最远可到达下标 2。下标 0 可到达的…

Unity XR 环境检测

需求&#xff1a; 检测环境是XR还是手机 代码&#xff1a; using UnityEngine.XR;public class EnvmentUtility {/// <summary>/// 是否是XR环境/// </summary>/// <returns>如果是XR&#xff0c;返回true&#xff0c;否则false</returns>public sta…

聊聊晶圆厂中的常见口语(1)

知识星球里的学员问&#xff1a;半导体公司的工程师总爱用一些英语代替中文&#xff0c;比如care,show&#xff0c;用这种简单的单词代替中文&#xff0c;能不能给我们总结工程师常用的英语单词&#xff0c;比较口语化的&#xff01; 为什么晶圆厂会用很多英文口语&#xff1f…

CompletableFuture常用方法

一、获得结果和触发计算 1.获取结果 &#xff08;1&#xff09;public T get() public class CompletableFutureAPIDemo{public static void main(String[] args) throws ExecutionException, InterruptedException{CompletableFuture<String> completableFuture Com…

c++进阶之多态讲解

这篇文章和大家一起学习一下c中的多态 多态的概念 多态的概念&#xff1a;通俗来讲&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 什么是静态多态 前⾯讲的函数重载和函数模板&#xff0c;它们传不同类型的参数就可以调用不同的函数&…

vue3学习记录-computed

vue3学习记录-computed 1.为什么要用computed2.使用方法2.1 基本实例2.2 可写计算属性 1.为什么要用computed 写个购物车的案例 <script setup> import { ref, reactive,computed } from "vue" const tableData reactive([{ name: 商品1, price: 10, num: 1…

Labview helper

IMAQ Advanced Setup Learn Geometric Pattern 2 VI 参数说明Curve Extraction Mode (0)指定VI如何识别图像中的曲线。如果您希望VI不对图像中对象的均匀性或图像背景做出任何假设&#xff0c;请将此选项设置为正常。如果您希望VI假定图像中的对象或图像背景由均匀的像素值组成…

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐&#xff1a;《算法竞赛》&#xff0c;算法竞赛大全书&#xff0c;网购&#xff1a;京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …

【Python】Uvicorn:Python 异步 ASGI 服务器详解

Uvicorn 是一个为 Python 设计的 ASGI&#xff08;异步服务器网关接口&#xff09;Web 服务器。它填补了 Python 在异步框架中缺乏一个最小化低层次服务器/应用接口的空白。Uvicorn 支持 HTTP/1.1 和 WebSockets&#xff0c;是构建现代异步Web应用的强大工具。 ⭕️宇宙起点 &a…

找到字符串中第一个匹配项的下标(c语言)

1./给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 //示例 1&#xff1a; //输入&#xff1a;haystac…

【深度学习】(7)--神经网络之保存最优模型

文章目录 保存最优模型一、两种保存方法1. 保存模型参数2. 保存完整模型 二、迭代模型 总结 保存最优模型 我们在迭代模型训练时&#xff0c;随着次数初始的增多&#xff0c;模型的准确率会逐渐的上升&#xff0c;但是同时也随着迭代次数越来越多&#xff0c;由于模型会开始学…

STM32 软件触发ADC采集

0.91寸OLED屏幕大小的音频频谱&#xff0c;炫酷&#xff01; STM32另一个很少人知道的的功能——时钟监测 晶振与软件的关系&#xff08;深度理解&#xff09; STM32单片机一种另类的IO初始化方法 ADC是一个十分重要的功能&#xff0c;几乎任何一款单片机都会包含这个功能&a…