MongoDB 和 Redis 一样,都属于 NoSQL 型的数据库,即非关系型的数据库;区别在于 Redis 的读写速度非常快,
一些操作频繁的场景很适合,作为临时缓存;而 MongoDB 善于存储,面对的是百万级甚至千万级的数据。
MongoDB 下载地址:https://www.mongodb.com/download-center/community?jmp=nav
Robo 3T 下载地址:https://robomongo.org/download
GitHub地址:https://github.com/intomylife/SpringBoot
4.0.0
com.zwc
springboot-mongodb-commons
0.0.1-SNAPSHOT
springboot-mongodb-commons
公用工程
UTF-8
1.8
Cairo-SR3
1.2.47
2.6.0
org.springframework.boot
spring-boot-starter-data-mongodb
com.alibaba
fastjson
${fastjson.version}
org.apache.commons
commons-pool2
${commons-pool2.version}
io.spring.platform
platform-bom
${platform-bom.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
package com.zwc.utils;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.List;
/**
* @ClassName MongoDBClient
* @Desc TODO MongoDB 工具类
* @Date 2019/4/1 9:43
* @Version 1.0
*/
@Component
public class MongoDBClient {
@Autowired
private MongoTemplate mongoTemplate;
/*
* @ClassName MongoDBClient
* @Desc TODO 创建集合,并返回是否创建成功 -2:已存在 / -1:创建失败 / 1:创建成功
* @Date 2019/4/1 10:59
* @Version 1.0
*/
public Integer createCollection(String collectionName){
// 先判断集合是否存在
if(mongoTemplate.collectionExists(collectionName)){
return -2;
}else{
// 创建一个集合
mongoTemplate.createCollection(collectionName);
// 判断集合是否存在
if(mongoTemplate.collectionExists(collectionName)){
return 1;
}else{
return -1;
}
}
}
/*
* @ClassName MongoDBClient
* @Desc TODO 在指定集合中添加数据
* @Date 2019/4/1 11:12
* @Version 1.0
*/
public void add(Collection> batchToSave , String collectionName){
mongoTemplate.insert(batchToSave,collectionName);
}
/*
* @ClassName MongoDBClient
* @Desc TODO 根据条件和指定集合删除数据
* @Date 2019/4/1 14:20
* @Version 1.0
*/
public void delete(Query query , Object obj , String collectionName){
mongoTemplate.remove(query, obj.getClass(), collectionName);
}
/*
* @ClassName MongoDBClient
* @Desc TODO 根据条件更新数据
* @Date 2019/4/1 14:30
* @Version 1.0
*/
public void update(Query query , Update update , Object obj , String collectionName){
mongoTemplate.updateMulti(query , update , obj.getClass() , collectionName);
}
/*
* @ClassName MongoDBClient
* @Desc TODO 获取指定集合下的全部数据
* @Date 2019/4/1 11:18
* @Version 1.0
*/
public List> getAllByCollectionName(Object obj , String collectionName){
return mongoTemplate.findAll(obj.getClass(),collectionName);
}
/*
* @ClassName MongoDBClient
* @Desc TODO 根据条件和集合名称查询数据
* @Date 2019/4/1 11:31
* @Version 1.0
*/
public List> getByConditionAndCollectionName(Query query , Object obj , String collectionName){
return mongoTemplate.find(query, obj.getClass() , collectionName);
}
}
service 工程是一个父工程,里面可能会包含 基础模块,用户模块,订单模块等等... 每个模块中又会分为 core 和 api
此工程中需要注意的就只有下面两个地方
# 端口
server.port=8081
# MongoDB 配置
## 无密码配置
## 如果存在此库就直接连接,如果不存在此库会自动创建
spring.data.mongodb.uri=mongodb://localhost:27017/springboot_mongodb
## 有密码配置
## name:用户名 / password:密码
###spring.data.mongodb.uri=mongodb://name:password@localhost:27017/springboot_mongodb
... 省略部分代码
/**
* @ClassName UserService
* @Desc TODO springboot整合mongodb 实现服务类
* @Date 2019/4/1 11:44
* @Version 1.0
*/
@Service
public class UserService {
@Autowired
private MongoDBClient mongoDBClient;
... 省略部分代码
}
注:调用接口时需打开 MongoDB 本地服务,要不然会报错
本地 MongoDB 如何设置密码
在本地开发时,通常会在 Windows 上安装 MongoDB,但是它默认是没有密码的,我们开发时也一般
不会去设置这个。出于好奇,研究了一下如何设置 MongoDB 的密码。
注: 下载的 MongoDB 不一样的版本,里面的文件名称可能稍微有点不一样。这里 MongoDB 的版本为 4.0
1. 打开下载好的 MongoDB 文件夹的 bin 目录
2. 里面文件很多很杂,我们需要关注的有
a) mongo.exe (连接操作 MongoDB)
b) mongod.cfg(MongoDB 配置信息)
3. 打开 mongo.exe
4. 输入指令 show dbs(显示所有库)
5. 输入指令 use admin
6. 输入指令 db.createUser({user:"your name",pwd:"your pwd",roles:[{role:"root",db:"admin"}]})
(your name 和 your pwd 自行更改为你自己的用户名和密码)
7. 出现 Successfully added user 等信息时就证明成功创建了一个用户
8. 输入指令 db.auth("your name","your pwd") ,如返回 1,就证明身份验证成功
9. 如果在 SpringBoot 中拿这个用户名和密码连接新建的库,会出现错误(时间原因还没深究)
10. 我们需要给每一个库都配置一个连接的用户名和密码
11. 输入指令 use 库名
12. 输入指令 db.createUser({user:"your name",pwd:"your pwd",roles:[{role:"root",db:"admin"}]})
(your name 和 your pwd 自行更改为你自己的用户名和密码,注:db 指定的还是 admin )
13. 如果你下载了 Robo 3T 1.1.1,打开连接到本地,打开 System 文件夹 -> admin 库 -> Collections 文件夹
-> System 文件夹 -> 双击打开 system.users 集合 ,可以看到两条记录,也就是刚刚创建的两个用户
从命名可以轻易看出,是 库名.用户名 形式(第九点也算有点眉目)
14. 打开 mongod.cfg 文件,ctrl + F 查找 #security
15. 回车在下面一行粘贴 security:
16. 再回车,两个空格,粘贴 authorization: enabled
17. 保存文件
18. 管理员身份运行 cmd , 输入指令 net stop "MongoDB Server"
19. 回车,服务停止成功后,再输入指令 net start "MongoDB Server"
20. 服务启动成功后,重新打开 mongo.exe
21. 直接输入指令 show dbs(显示所有库),会提示 error 信息,需要身份验证,证明配置成功
22. 如果你紧接着使用指令 db.auth("your name","your pwd") 会发现报 error
23. 别慌,指令 use admin 进入到 admin 库,再使用指令 db.auth("your name","your pwd"),正常返回 1
到此 SpringBoot 整合 MongoDB 就结束了,关键的点就这么多,多多尝试,一定会成功的!
希望能够帮助到你
over