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

