SpringBoot整合MongoDB流程詳解
1. MongoDB簡(jiǎn)介
MongoDB是一種面向文檔的數(shù)據(jù)庫(kù)管理系統(tǒng),它是一個(gè)介于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之間的產(chǎn)品。
MongoDB 功能豐富,它支持一種類似JSON的BSON數(shù)據(jù)格式,既可以存儲(chǔ)簡(jiǎn)單的數(shù)據(jù)格式,也可以存儲(chǔ)復(fù)雜的數(shù)據(jù)類型。
MongoDB最大的特點(diǎn)是它支持的查詢語(yǔ)言非常強(qiáng)大,并且還支持對(duì)數(shù)據(jù)建立索引??傮w來(lái)說(shuō),MongoDB是一款應(yīng)用相當(dāng)廣泛的NoSQL數(shù)據(jù)庫(kù)。
2. MongoDB安裝
我用的是寶塔面板進(jìn)行安裝的,安裝目錄是/www/server/mongodb。
對(duì)MongoDB配置文件config.conf修改,文件內(nèi)容如下:
- dbpath=/opt/mongodb/db
- logpath=/opt/mongodb/logs/mongodb. log
- port=27017
- fork=true
配置解釋:
- 第1行配置表示數(shù)據(jù)存儲(chǔ)目錄。
- 第2行配置表示日志文件位置。
- 第3行配置表示啟動(dòng)端口。
- 第4行配置表示以守護(hù)程序的方式啟動(dòng)MongoDB,即允許MongoDB在后臺(tái)運(yùn)行。
3. MongoDB的啟動(dòng)和關(guān)閉
配置完成后,還是在 bin目錄下,運(yùn)行如下命令啟動(dòng)MongoDB:./mongod -f mongo.conf --bind ip all -f表示指定配置文件的位置,–bind_ip_all則表示允許所有的遠(yuǎn)程地址連接該 MongoDB實(shí)例.MongoDB啟動(dòng)成功后,在 bin目錄下再執(zhí)行mongo命令,進(jìn)入 MongoDB控制臺(tái),然后輸入
./mongod -f ../config.conf --bind_ip_all
-f 表示指定配置文件的位置,–bind_ip_all 則表示允許所有的遠(yuǎn)程地址連接該MongoDB實(shí)例。
MongoDB啟動(dòng)成功后,在 bin目錄下再執(zhí)行 mongo命令,進(jìn)入 MongoDB控制臺(tái),然后輸入
.mongo
db.version()
默認(rèn)情況下,啟動(dòng)后連接的是 MongoDB中的test庫(kù),而關(guān)閉MongoDB的命令需要在 admin庫(kù)中執(zhí)行,因此關(guān)閉MongoDB需要首先切換到admin庫(kù),然后執(zhí)行db.shutdownServer();命令,完整操作步驟如下:
use admin; db.shutdownServer(); exit
服務(wù)關(guān)閉后,執(zhí)行exit命令退出控制臺(tái),此時(shí)如果再執(zhí)行./mongo命令就會(huì)執(zhí)行失敗。
4. 安全管理
默認(rèn)情況下,啟動(dòng)的MongoDB沒(méi)有登錄密碼,在生產(chǎn)環(huán)境中這是非常不安全的,但是不同于MySQL、Oracle等關(guān)系型數(shù)據(jù)庫(kù),MongoDB中每一個(gè)庫(kù)都有獨(dú)立的密碼,在哪一個(gè)庫(kù)中創(chuàng)建用戶就要在哪一個(gè)庫(kù)中驗(yàn)證密碼。要配置密碼,首先要?jiǎng)?chuàng)建一個(gè)用戶,例如在admin庫(kù)中創(chuàng)建一個(gè)用戶,代碼如下:
db.createUser({user:"suohechuan",pwd:"123@456",roles:[{role:"readWrite",db:"test"}]})
新創(chuàng)建的用戶名為 suohechuan,密碼是123@456,roles表示該用戶具有的角色,這里的配置表示該用戶對(duì)test 庫(kù)具有讀和寫兩項(xiàng)權(quán)限。 用戶創(chuàng)建成功后,關(guān)閉當(dāng)前實(shí)例,然后重新啟動(dòng),啟動(dòng)命令如下:
./mongod -f ../config.conf -auth --bind_ip_all
啟動(dòng)成功后,再次進(jìn)入控制臺(tái),然后切換到admin庫(kù)中驗(yàn)證登錄(默認(rèn)連接上的庫(kù)是test庫(kù)),驗(yàn)證成功后就可以對(duì)test庫(kù)執(zhí)行讀寫操作了,代碼如下:
./mongo db.auth("suohechuan","123@456")
如果db.auth(“suohechuan”,“123@456”)命令執(zhí)行結(jié)果為1,就表示認(rèn)證成功,可以執(zhí)行對(duì)test 庫(kù)的讀寫操作。
整合Spring Boot
借助于Spring Data MongoDB,Spring Boot 為 MongoDB也提供了開(kāi)箱即用的自動(dòng)化配置方案,具體配置步驟如下。
1. 創(chuàng)建Spring Boot工程
創(chuàng)建Spring Boot Web工程,添加MongoDB依賴,代碼如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2. 配置MongoDB
在application.properties 中配置MongoDB的連接信息,代碼如下:
spring.data.mongodb.authentication-database=admin spring.data.mongodb.database=test spring.data.mongodb.host=170.0.0.1 spring.data.mongodb.port=27017 spring.data.mongodb.username=suohechuan spring.data.mongodb.password=123@456
配置解釋:
- 第1行配置表示驗(yàn)證登錄信息的庫(kù)。
- 第2行配置表示要連接的庫(kù),認(rèn)證信息不一定要在連接的庫(kù)中創(chuàng)建,因此這兩個(gè)分開(kāi)配置。
- 第3~6行配置表示MongoDB的連接地址和認(rèn)證信息等
3. 創(chuàng)建實(shí)體類
創(chuàng)建實(shí)體類Book,代碼如下:
@Data @AllArgsConstructor @NoArgsConstructor public class Book implements Serializable { private Integer id; private String name; private String author; }
4. 創(chuàng)建BookDao
BookDao 的定義類似于Spring Data JPA中的Repository定義,代碼如下:
@Repository public interface BookDao extends MongoRepository<Book,Integer> { List<Book> findByAuthorContains (String author) ; Book findByNameEquals (String name) ; }
MongoRepository中已經(jīng)預(yù)定義了針對(duì)實(shí)體類的查詢、添加、刪除等操作。BookDao 中可以按照J(rèn)PA方法命名規(guī)則定義查詢方法。
5. 創(chuàng)建 Controller
簡(jiǎn)單起見(jiàn),直接將BookDao注入 Controller進(jìn)行測(cè)試:
@RestController public class BookController { @Autowired BookDao bookDao; @GetMapping("/test1") public void test1() { List<Book> books = new ArrayList<>(); Book b1 = new Book(); b1.setId(1); b1.setName("朝花夕拾"); b1.setAuthor("魯迅"); books.add(b1); Book b2 = new Book(); b2.setId(2); b2.setName("吶喊"); b2.setAuthor("魯迅"); books.add(b2); bookDao.insert(books); List<Book> books1 = bookDao.findByAuthorContains("魯迅"); System.out.println(books1); Book book = bookDao.findByNameEquals("朝花夕拾"); System.out.println(book); } @Autowired MongoTemplate mongoTemplate; @GetMapping("/test2") public void test2() { List<Book> books = new ArrayList<>(); Book b1 = new Book(); b1.setId(3); b1.setName("圍城"); b1.setAuthor("錢鐘書(shū)"); books.add(b1); Book b2 = new Book(); b2.setId(4); b2.setName("宋詩(shī)選注"); b2.setAuthor("錢鐘書(shū)"); books.add(b2); mongoTemplate.insertAll(books); List<Book> list = mongoTemplate.findAll(Book.class); System.out.println(list); Book book = mongoTemplate.findById(3, Book.class); System.out.println(book); } }
代碼解釋:
- 第19行調(diào)用MongoRepository中的insert方法插入集合中的數(shù)據(jù)。
- 第20行表示查詢作者名字中包含“魯迅”的所有書(shū)。
- 第22行表示查詢書(shū)名為“朝花夕拾”的圖書(shū)信息。
6. 測(cè)試 BookDao
創(chuàng)建好Controller 后,在瀏覽器中輸入/localhost:8080/test1,控制臺(tái)打印日志
[Book(id=1, name=朝花夕拾, author=魯迅), Book(id=2, name=吶喊, author=魯迅)]
Book(id=1, name=朝花夕拾, author=魯迅)
7. 使用MongoTemplate
除了繼承MongoRepository外,Spring Data MongoDB還提供了MongoTemplate用來(lái)方便地操作MongoDB。在 Spring Boot 中,若添加了MongoDB相關(guān)的依賴,而開(kāi)發(fā)者并沒(méi)有提供MongoTemplate,則默認(rèn)會(huì)有一個(gè)MongoTemplate 注冊(cè)到Spring 容器中,相關(guān)配置源碼在MongoDataAutoConfiguration類中。因此,用戶可以直接使用MongoTemplate,在 Controller中直接注入 MongoTemplate就可以使用了,添加如下代碼到第5步的Controller中:
@Autowired MongoTemplate mongoTemplate; @GetMapping("/test2") public void test2() { List<Book> books = new ArrayList<>(); Book b1 = new Book(); b1.setId(3); b1.setName("圍城"); b1.setAuthor("錢鐘書(shū)"); books.add(b1); Book b2 = new Book(); b2.setId(4); b2.setName("宋詩(shī)選注"); b2.setAuthor("錢鐘書(shū)"); books.add(b2); mongoTemplate.insertAll(books); List<Book> list = mongoTemplate.findAll(Book.class); System.out.println(list); Book book = mongoTemplate.findById(3, Book.class); System.out.println(book); }
代碼解釋;
- 第1、2行表示注入Spring Boot提供的MongoTemplate。
- 第16行表示向MongoDB中插入一個(gè)集合。
- 第17行表示查詢book 集合中的所有數(shù)據(jù)。第19行表示根據(jù)id查詢一個(gè)文檔。
- 最后,在瀏覽器中輸入 http:/localhost:8080/test2,控制臺(tái)打印日志。
[Book(id=1, name=朝花夕拾, author=魯迅),Book(id=2, name=吶喊, author=魯迅), Book(id=3, name=圍城, author=錢鐘書(shū)), Book(id=4, name=宋詩(shī)選注, author=錢鐘書(shū))]
Book(id=3, name=圍城, author=錢鐘書(shū))
到此這篇關(guān)于SpringBoot整合MongoDB流程詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合MongoDB內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
自制Java工具實(shí)現(xiàn)翻譯鼠標(biāo)選中文本
這篇文章主要為大家詳細(xì)介紹了如何自制Java工具實(shí)現(xiàn)ctrl+c+c翻譯鼠標(biāo)選中文本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01Java static方法用法實(shí)戰(zhàn)案例總結(jié)
這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09Java動(dòng)態(tài)線程池插件dynamic-tp集成過(guò)程淺析
這篇文章主要介紹了Java動(dòng)態(tài)線程池插件dynamic-tp集成過(guò)程,dynamic-tp是一個(gè)輕量級(jí)的動(dòng)態(tài)線程池插件,它是一個(gè)基于配置中心的動(dòng)態(tài)線程池,線程池的參數(shù)可以通過(guò)配置中心配置進(jìn)行動(dòng)態(tài)的修改2023-03-03springboot實(shí)現(xiàn)全局異常捕獲的使用示例
任何系統(tǒng),我們不會(huì)傻傻的在每一個(gè)地方進(jìn)行異常捕獲和處理,整個(gè)系統(tǒng)一般我們會(huì)在一個(gè)的地方統(tǒng)一進(jìn)行異常處理,本文主要介紹了springboot實(shí)現(xiàn)全局異常捕獲的使用示例,感興趣的可以了解一下2023-11-11使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化
這篇文章主要為大家介紹了微服務(wù)優(yōu)化之使用gRPC做微服務(wù)的內(nèi)部通信,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Java基于對(duì)象流實(shí)現(xiàn)銀行系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java基于對(duì)象流實(shí)現(xiàn)銀行系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09