SpringBoot 学习笔记_整合NoSQL —— MongoDB
声明:
本次学习参考 《SpringBoot + Vue 开发实战》 · 王松(著) 一书。
本文的目的是记录我学习的过程和遇到的一些问题以及解决办法,其内容主要来源于原书。
如有侵权,请联系我删除
文章目录
- SpringBoot 学习笔记_整合NoSQL —— MongoDB
- SpringBoot 整合 NoSQL
- 整合 MongoDB
- MongDB 安装
- 整合 MongDB
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