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/mongodbchmod 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;@Overridepublic void insert(Emp emp) {}@Overridepublic void delete(String id) {}@Overridepublic void delete(Emp emp) {}@Overridepublic void update(Emp emp) {}@Overridepublic Emp findEmp(String id) {}@Overridepublic 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中:

 @Overridepublic 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中:

 @Overridepublic 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中:

@Overridepublic 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比较特殊。

@Overridepublic 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中:

 @Overridepublic Emp findEmp(String id) {return  mongoTemplate.findById(id,Emp.class);}

 测试类MongoTest中:

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

启动测试:

现在表中的数据

 

查出来的结果:

六.我的项目结构 

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

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】链表:21.合并两个有序链表(easy)

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法&#xff08;双指针&#xff09; 4、代码 1、题目链接 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 3、解法&#xff08;双指针&#xff09; 推荐一篇题解…

计算机毕业设计Python+Spark知识图谱高考分数线预测 高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计

《PythonSpark知识图谱高考分数线预测与志愿推荐系统》开题报告 一、课题背景及意义 1. 背景 随着我国高考制度的不断完善以及大数据技术的快速发展&#xff0c;高考志愿推荐系统的需求日益增长。高考作为中国教育体系中的重要环节&#xff0c;其志愿填报直接关系到考生的未…

双指针--收尾的两道题

双指针 (封面起到吸引读者作用&#xff0c;和文章内容无关哈&#xff0c;但是文章也是用心写的&#xff09; 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums…

Arduino UNO R3自学笔记13 之 Arduino使用LM35如何测量温度?

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习使用传感器测温。 1.LM35介绍 一般来讲当知道需求&#xff0c;就可以 通过既定要求的条件来筛选需要的器件&#xff0c;多方面的因素最终选定了器件…

鸿蒙开发需要学什么语言

随着物联网(IoT)技术的发展&#xff0c;操作系统作为连接人与智能设备的关键桥梁变得尤为重要。鸿蒙系统(HarmonyOS)&#xff0c;作为华为推出的一款面向全场景的分布式操作系统&#xff0c;不仅在国内引起了广泛关注&#xff0c;在国际上也逐渐崭露头角。对于开发者而言&#…

全新升级的GUI: Depthai Viewer 使用指南发布

DepthAIViewer是一个 GUI 应用程序&#xff0c;可让您通过实时输出可视化图像来使用相机。 DepthAIViewer 是 DepthAI 和 OAK 相机的可视化工具。它在默认情况下将运行一个演示应用程序&#xff0c;该应用程序将可视化所有steam在设备上运行推理。它还允许您更改设备的配置。当…

CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序

在当今这个瞬息万变的商业世界里&#xff0c;营销领域正经历着一场深刻的变革。传统的CMO岗位似乎在时代的浪潮中逐渐失去了它的光芒&#xff0c;CTMO正在悄然取代传统CMO的岗位。 随着营销丛林现象的出现&#xff0c;企业面临着前所未有的挑战。许多企业发现&#xff0c;那些传…

自动驾驶系列—深度剖析自动驾驶芯片SoC架构:选型指南与应用实战

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Vue+NestJS项目实操(图书管理后台)

一、项目搭建 前端基于vben进行二次开发 在Github下载vben框架&#xff0c;搜索vben即可 下载地址&#xff1a;https://github.com/vbenjs/vue-vben-admin 下载完成后&#xff0c;进行安装依赖&#xff0c;使用命令&#xff1a; // 下载依赖 pnpm install// 运行项目 pnpm …

数据分析-30-电影死亡笔记中的数据分析思维

文章目录 1 死亡笔记简介2 推理过程中的数据分析2.1 第一个问题2.2 第二个问题2.3 第三个问题3 数据分析的发展4 参考附录1 死亡笔记简介 《死亡笔记》改编自小畑健同名日本人气漫画《Death note》,故事描述拥有一本写上姓名就能将人置于死地笔记本的高中生夜神月与天才警部搜…

构建企业数字化转型的战略基石——TOGAF框架的深度解析

数字化时代的企业变革需求 在全球范围内&#xff0c;数字化转型已成为企业提高竞争力、优化运营流程、提升客户体验的核心战略。数字技术的迅猛发展&#xff0c;不仅改变了传统行业的运作模式&#xff0c;也迫使企业重新思考其业务架构和技术基础设施。TOGAF&#xff08;The O…

8.数据结构与算法-双向链表

双向链表的结构定义 从第二个指针找到下一个元素 从第一个指针找到上一个元素 双向循环列表 从第二个指针找到下一个元素&#xff0c;第二个指针可以往前循环找到链表开头 从第一个指针找到上一个元素&#xff0c;第一个指针可以往前循环昭侯链表结尾 双向链表的插入 双向链…

自闭症孩子快乐成长之路:选择寄宿学校的理由

在探索自闭症孩子快乐成长之路的过程中&#xff0c;许多家长面临着一系列的选择与挑战。如何为孩子找到一个既能提供专业教育&#xff0c;又能保障他们身心健康的成长环境&#xff0c;成为了家长们共同关注的焦点。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所…

Linux 万字入门教程

0. 前言 文章已经收录到 GitHub 个人博客项目&#xff0c;欢迎 Star&#xff1a; https://github.com/chenyl8848/chenyl8848.github.io或者访问网站&#xff0c;进行在线浏览&#xff1a; https://chenyl8848.github.io/1. Linux 介绍 1.1 引言 Linux 是一套免费使用和自由…

利用Spring Boot构建足球青训管理平台

2 相关技术简介 2.1 Java技术 Java是一门伟大的纯面向对象的编程语言和编程语言。同时&#xff0c;它还是Java语言从嵌入式开发到企业级开发的平台。Java凭借其一次编译&#xff0c;任何地方执行的优点&#xff0c;使得盛行的web应用程序有大量的Java编译&#xff0c;很好地支…

无人机科普研学基地建设技术详解

无人机科普研学基地的建设技术详解涉及多个方面&#xff0c;包括基地建设规划、主要功能区划分、配套设备与系统、课程设计与实施等。以下是对这些方面的详细阐述&#xff1a; 一、基地建设规划 1. 目标定位&#xff1a;无人机科普研学基地旨在通过实践和学习活动&#xff0c;…

CountDownlatch、CyclicBarrier、Semaphore使用介绍

一、CountDownlatch(多线程通信计数器实现多个线程的协同工作) import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class CountDownLatchTest {public static void main(String[] arg…

隐马尔可夫模型在股市预测中的应用

隐马尔可夫模型在股市预测中的应用 原创 QuantML QuantML 2024年09月29日 21:44 Content 摘要 股市因其复杂多变的特性&#xff0c;预测未来股价一直是一个挑战。然而&#xff0c;运用高级方法可以显著提高股价预测的准确性。隐马尔可夫模型&#xff08;Hidden Markov Mode…

常用的Java安全框架

Spring Security&#xff1a; 就像Java安全领域的“瑞士军刀”&#xff0c;功能全面且强大。 支持认证、授权、加密、会话管理等安全功能。 与Spring框架无缝集成&#xff0c;使用起来特别方便。 社区活跃&#xff0c;文档丰富&#xff0c;遇到问题容易找到解决方案。 Apach…

python中的find函数怎么用

Python find() 方法检测字符串中是否包含子字符串 str &#xff0c;如果指定 beg&#xff08;开始&#xff09; 和 end&#xff08;结束&#xff09; 范围&#xff0c;则检查是否包含在指定范围内&#xff0c;如果包含子字符串返回开始的索引值&#xff0c;否则返回-1。 语法 …