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