一、安装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);}
启动测试:
现在表中的数据
查出来的结果:
六.我的项目结构
到这就基本结束了,这里展示我的项目结构供大家参考,大家加油。