6.2 整合MongoDB
- [1. MongoDB简介](#1. MongoDB简介)
- [2. MongoDB安装](#2. MongoDB安装)
-
- [2.1 下载](#2.1 下载)
- [2.2 配置MongoDB](#2.2 配置MongoDB)
- [2.3 MongoDB的启动和关闭](#2.3 MongoDB的启动和关闭)
-
- [1. 启动MongoDB](#1. 启动MongoDB)
- [2. 关闭MogoDB](#2. 关闭MogoDB)
- [2.4 安全管理](#2.4 安全管理)
- [3. 整合SpringBoot](#3. 整合SpringBoot)
-
- [3.1 依赖](#3.1 依赖)
- [3.2 MongoTemplate使用](#3.2 MongoTemplate使用)
- [3.3 测试](#3.3 测试)
-
- [1. 新增](#1. 新增)
- [2. 查询](#2. 查询)
- [3. 删除](#3. 删除)
- *****************************************************************************
1. MongoDB简介
MongoDB是一种面向文档的数据库管理系统 ,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB功能丰富,它支持一种类似JSON的BSON数据格式 ,既可以存储简单的数据格式,也可以存储复杂的数据类型 。
MongoDB最大的特点是它支持的查询语言非常强大,并且还支持对数据建立索引。总体来说,MongoDB是一款应用相当广泛的NoSQL数据库。
2. MongoDB安装
本案例使用的MongoDB版本为写作本书时的最新版本4.0.0,安装环境为CentOS 7。安装步骤如下。
2.1 下载
java
//1.下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
java
//2.解压
tar -zxvf mongodb-linux-x86_64-4.0.0.tgz
//3.重命名
mv mongodb-linux-x86_64-4.0.0 mongodb
2.2 配置MongoDB
进入mongodb目录下,创建两个文件夹db和logs,分别用来保存数据和日志,代码如下:
java
cd mongodb
mkdir db
mkdir logs
然后进入bin目录下,创建一个新的MongoDB配置文件mongo.conf,文件内容如下:
java
dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log port=27017
fork=true
配置解释:
- 第1行配置表示数据存储目录。
- 第2行配置表示日志文件位置。
- 第3行配置表示启动端口。
- 第4行配置表示以守护程序的方式启动MongoDB,即允许MongoDB在后台运行。
2.3 MongoDB的启动和关闭
1. 启动MongoDB
配置完成后,还是在bin目录下,运行如下命令启动MongoDB:
java
./mongod -f mongo.conf --bind_ip_all
-f
表示指定配置文件的位置,--bind_ip_all
则表示允许所有的远程地址连接该MongoDB实例。
MongoDB启动成功后,在bin目录下再执行mongo命令,进入MongoDB控制台 ,然后输入db.version()
,如果能看到MongoDB的版本号,就表示安装成功:
java
./mongo
db.version()
2. 关闭MogoDB
默认情况下,启动后连接的是MogoDB中的test库,而关闭MongoDB的命令需要在admin 库中执行,因此关闭MongoDB需要首先切换到admin库,然后执行db.shutdownServer();命令,完整操作步骤如下:
java
use admin;
db.shutdownServer();
exit
服务关闭后,执行exit命令退出控制台,此时如果再执行./mongo命令就会执行失败,如图6-14 所示。
2.4 安全管理
默认情况下,启动的MongoDB没有登录密码,在生产环境中这是非常不安全的,但是不同于MySQL、Oracle等关系型数据库,MongoDB中每一个库都有独立的密码,在哪一个库中创建用户就要在哪一个库中验证密码。
要配置密码,首先要创建一个用户,例如在admin库中创建一个用户,代码如下:
java
use admin;
db.createUser({user:"admin",pwd:"Abc1234%",roles:[{role:"readWrite",db:"test"}]})
新创建的用户名为admin,密码是Abc1234%,roles表示该用户具有的角色,这里的配置表示该用户对test库具有读和写两项权限。
用户创建成功后,关闭当前实例
java
db.shutdownServer();
exit
然后重新启动,启动命令如下:
java
./mongod -f mongo.conf --bind_ip_all
启动成功后,再次进入控制台,然后切换到admin库中验证登录(默认连接上的库是test库),验证成功后就可以对test库执行读写操作了,代码如下:
java
./mongo
db.auth("admin","Abc1234%")
如果db.auth("admin","Abc1234%")
命令执行结果为1,就表示认证成功,可以执行对test库的读写操作。
3. 整合SpringBoot
借助于SpringData MongoDB,SpringBoot为MongoDB也提供了开箱即用的自动化配置方案,具体配置步骤如下。
3.1 依赖
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3.2 MongoTemplate使用
java
import com.mongodb.client.result.DeleteResult;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.domain.MdbBook;
import com.ruoyi.system.service.MdbService;
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.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class MdbServiceImpl implements MdbService {
@Resource
private MongoTemplate mongoTemplate;
/**
* 根据作者查询书籍信息
*
* @param author
* @return
*/
@Override
public List<MdbBook> findByAuthorContains(String author) {
Query query = new Query();
query.addCriteria(Criteria.where("author").is(author));
return mongoTemplate.find(query, MdbBook.class, "book");
}
/**
* 根据Id查询
*
* @param id
* @return
*/
@Override
public MdbBook findById(String id) {
return mongoTemplate.findById(id, MdbBook.class);
}
/**
* 新增book
*
* @param book
*/
@Override
public void insertBook(MdbBook book) {
book.setId(IdUtils.simpleUUID());
mongoTemplate.insert(book, "book");
}
/**
* id删除
*
* @param id
*/
@Override
public void delBookById(String id) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
mongoTemplate.remove(query, "book");
}
}
3.3 测试
1. 新增
2. 查询
3. 删除
删除朝花夕拾