SpringBoot 学习笔记_整合NoSQL —— MongoDB
声明:
本次学习参考 《SpringBoot + Vue 开发实战》 · 王松(著) 一书。
本文的目的是记录我学习的过程和遇到的一些问题以及解决办法,其内容主要来源于原书。
如有侵权,请联系我删除
SpringBoot 整合 NoSQL
整合 MongoDB
MongDB 是一种面向文档的数据库管理系统,介于关系型数据库和非关系型数据库直接的产品。
MongDB 安装
-
CentOS 7
-
安装 wget:
yum install wget
-
使用 wget 下载 MongDB:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
-
解压 MongoDB
tar -zxvf mongodb-linux-x86_64-4.0.0.tgz
- `mv mongodb-linux-x86_64-4.0.0.0 mongodb
-
配置 MongoDB
进入 MongoDB 目录下,创建两个文件夹 db 和 logs, 分别用来保存数据和日志
cd mongodb mkdir db mkdir logs
-
进入 bin 目录,创建新的 MongoDB 配置文件 mongo.conf
# 数据存储目录 dbpath=/opt/mongodb/db # 日志文件位置 logpath=/opt/mongodb/logs/mongodb.log # 启动端口 port=27017 # 以守护程序的方式启动 MongoDB,即允许后台允许 fork=true
-
启动 MongoDB
./mongod -f mongo.conf --bind_ip_all
- -f 表示指定配置文件的位置
- –bind_ip_all 则表示允许所有的远程地址连接该 MongoDB 实例
启动成功后,在 bin 目录下再执行 mongo 命令,进入 MongoDB 控制台,可以输入
db.version()
查看版本进行测试安装是否成功。 -
关闭 MongoDB
默认情况下,MongoDB 启动后连接的是 test 库,而关闭 MongoDB 的命令需要在 admin 库中执行,因此关闭 MongoDB 需要首先切换到 admin 库,然后执行
db.shutdownServer();
命令use admin; db.shutdownServer(); exit;
-
安全管理
默认情况下 MongoDB 没有登录密码,在生产环境中这是非常不安全的,MongoDB 中每一个库都有独立的密码,要配置密码,首先要创建一个用户。例如在 admin 库中创建一个用户
use admin; db.createUser({"user": "sang", "pwd": "123456", roles: [{role: "readWrite", db: "test"}]})
用户创建成功后,关闭当前实例然后重新启动
./mongod -f mongo.conf --auth --bind ip all
启动成功后,再次进入控制台,切换到 admin 库中登录
./mongo db.auth("sang", "123456")
如果执行结果为 1 , 表示认证成功。
-
-
Windows
-
下载 MongoDB 安装包
https://www.mongodb.com/download-center/community?jmp=nav
-
运行安装程序(默认配置,一路下一步即可)
-
启动 MongoDB
-
整合 MongDB
-
创建 SpringBoot 项目,添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
-
配置 MongDB (
application.properties
)### MongoDB 配置 ### # 验证登录信息的库 spring.data.mongodb.authentication-database=admin # 要连接的库。认证信息不一定要在连接的库中创建 spring.data.mongodb.database=test # 基本配置 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.username=sang spring.data.mongodb.password=123456
-
创建实体类
public class BookMongo { private Integer id; private String name; private String author; /* Getter & Setter */ }
-
创建 Dao (继承 MongoRepository)
public interface BookMongoDao extends MongoRepository<BookMongo, Integer>{ List<BookMongo> findByAuthorContains(String author); Book findByNameEquals(String name); }
-
创建 Controller
public class BookMongoDBController { @Autowired BookMongoDao bookDao; @GetMapping("/mongoTest") public void mongoTest(){ List<BookMongo> books = new ArrayList<>(); BookMongo book1 = new BookMongo(); book1.setId(11); book1.setName("Spring+Vue开发实战"); book1.setAuthor("王松"); books.add(book1); BookMongo book2 = new BookMongo(); book2.setId(22); book1.setName("呐喊"); book1.setAuthor("鲁迅"); books.add(book2); // MongoRepository 中的 insert 方法插入集合中的数据 bookDao.insert(books); List<BookMongo> books1 = bookDao.findByAuthorContains("王松"); System.out.println(books1); BookMongo book = bookDao.findByNameEquals("呐喊"); System.out.println(book); } }
-
测试
https://localhost:8080/mongoTest1
或者,SpringBoot 默认提供了 MongoTemplate
可以直接使用,也可以自定义。
-
创建 Controller
public class BookMongoDBController { /* MongoTemplate */ @Autowired MongoTemplate mongoTemplate; @GetMapping("/mongoTest2") public void mongoTest2 () { List<BookMongo> books = new ArrayList<>(); BookMongo book1 = new BookMongo(); book1.setId(31); book1.setName("围城"); book1.setAuthor("钱钟书"); books.add(book1); BookMongo book2 = new BookMongo(); book2.setId(41); book2.setName("登鹳雀楼"); book2.setAuthor("李白"); books.add(book2); mongoTemplate.insertAll(books); List<BookMongo> list = mongoTemplate.findAll(BookMongo.class); System.out.println(list); BookMongo book = mongoTemplate.findById(31, BookMongo.class); System.out.println(book); } }
-
测试
https://localhost:8080/mongoTest2