SpringBoot整合MongoDB流程詳解
1. MongoDB簡介
MongoDB是一種面向文檔的數(shù)據(jù)庫管理系統(tǒng),它是一個介于關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫之間的產(chǎn)品。
MongoDB 功能豐富,它支持一種類似JSON的BSON數(shù)據(jù)格式,既可以存儲簡單的數(shù)據(jù)格式,也可以存儲復雜的數(shù)據(jù)類型。
MongoDB最大的特點是它支持的查詢語言非常強大,并且還支持對數(shù)據(jù)建立索引??傮w來說,MongoDB是一款應用相當廣泛的NoSQL數(shù)據(jù)庫。
2. MongoDB安裝
我用的是寶塔面板進行安裝的,安裝目錄是/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行配置表示以守護程序的方式啟動MongoDB,即允許MongoDB在后臺運行。
3. MongoDB的啟動和關閉
配置完成后,還是在 bin目錄下,運行如下命令啟動MongoDB:./mongod -f mongo.conf --bind ip all -f表示指定配置文件的位置,–bind_ip_all則表示允許所有的遠程地址連接該 MongoDB實例.MongoDB啟動成功后,在 bin目錄下再執(zhí)行mongo命令,進入 MongoDB控制臺,然后輸入
./mongod -f ../config.conf --bind_ip_all
-f 表示指定配置文件的位置,–bind_ip_all 則表示允許所有的遠程地址連接該MongoDB實例。
MongoDB啟動成功后,在 bin目錄下再執(zhí)行 mongo命令,進入 MongoDB控制臺,然后輸入
.mongo
db.version()
默認情況下,啟動后連接的是 MongoDB中的test庫,而關閉MongoDB的命令需要在 admin庫中執(zhí)行,因此關閉MongoDB需要首先切換到admin庫,然后執(zhí)行db.shutdownServer();命令,完整操作步驟如下:
use admin; db.shutdownServer(); exit
服務關閉后,執(zhí)行exit命令退出控制臺,此時如果再執(zhí)行./mongo命令就會執(zhí)行失敗。
4. 安全管理
默認情況下,啟動的MongoDB沒有登錄密碼,在生產(chǎn)環(huán)境中這是非常不安全的,但是不同于MySQL、Oracle等關系型數(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 庫具有讀和寫兩項權限。 用戶創(chuàng)建成功后,關閉當前實例,然后重新啟動,啟動命令如下:
./mongod -f ../config.conf -auth --bind_ip_all
啟動成功后,再次進入控制臺,然后切換到admin庫中驗證登錄(默認連接上的庫是test庫),驗證成功后就可以對test庫執(zhí)行讀寫操作了,代碼如下:
./mongo db.auth("suohechuan","123@456")
如果db.auth(“suohechuan”,“123@456”)命令執(zhí)行結果為1,就表示認證成功,可以執(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行配置表示要連接的庫,認證信息不一定要在連接的庫中創(chuàng)建,因此這兩個分開配置。
- 第3~6行配置表示MongoDB的連接地址和認證信息等
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)預定義了針對實體類的查詢、添加、刪除等操作。BookDao 中可以按照JPA方法命名規(guī)則定義查詢方法。
5. 創(chuàng)建 Controller
簡單起見,直接將BookDao注入 Controller進行測試:
@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相關的依賴,而開發(fā)者并沒有提供MongoTemplate,則默認會有一個MongoTemplate 注冊到Spring 容器中,相關配置源碼在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=錢鐘書)
到此這篇關于SpringBoot整合MongoDB流程詳解的文章就介紹到這了,更多相關SpringBoot整合MongoDB內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java動態(tài)線程池插件dynamic-tp集成過程淺析
這篇文章主要介紹了Java動態(tài)線程池插件dynamic-tp集成過程,dynamic-tp是一個輕量級的動態(tài)線程池插件,它是一個基于配置中心的動態(tài)線程池,線程池的參數(shù)可以通過配置中心配置進行動態(tài)的修改2023-03-03