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<BookMongoDao, 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 MongoTempalte 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