Spring Boot 2.x基礎教程:使用MongoDB

2022-01-29 程序猿DD

收錄於話題 #Spring Boot 110個

前段時間因為團隊調整,大部分時間放在了團隊上,這系列的更新又耽誤了一下。但既然承諾持久更新,那就不會落下,今天開始繼續更新這部分的內容!

過了年,重申一下這個系列的目標:目前主要任務就是把Spring Boot 1.x部分沒有升級的內容做完升級。我會將因為版本升級而產生的變化做一些說明,這樣不論低版本的讀者還是高版本的讀者都能找到自己想要的部分。這也是這次做2.x版本升級的重要原因,儘量避免或減少有讀者用著高版本參考我這邊低版本的實現而出現問題,然後開始問候我家人的情況。

在完成上述所有的更新之後,接下來很重要的更新內容將會集中在關於Spring Boot的一些進階內容,比如:要做什麼擴展的時候,該從哪裡著手等。

如果是您是Spring Boot的使用者,那麼一定要關注一下!後面的內容會越來越精彩!

下面回歸今天的主題,如何在Spring Boot中使用MongoDB!

MongoDB簡介

MongoDB是一個基於分布式文件存儲的資料庫,它是一個介於關係資料庫和非關係資料庫之間的產品,其主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢於一身。

MongoDB支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型,也因為他的存儲格式也使得它所存儲的數據在Nodejs程序應用中使用非常流暢。

既然稱為NoSQL資料庫,Mongo的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

但是,MongoDB也不是萬能的,同MySQL等關係型資料庫相比,它們在針對不同的數據類型和事務要求上都存在自己獨特的優勢。在數據存儲的選擇中,堅持多樣化原則,選擇更好更經濟的方式,而不是自上而下的統一化。

較常見的,我們可以直接用MongoDB來存儲鍵值對類型的數據,如:驗證碼、Session等;由於MongoDB的橫向擴展能力,也可以用來存儲數據規模會在未來變的非常巨大的數據,如:日誌、評論等;由於MongoDB存儲數據的弱類型,也可以用來存儲一些多變json數據,如:與外系統交互時經常變化的JSON報文。而對於一些對數據有複雜的高事務性要求的操作,如:帳戶交易等就不適合使用MongoDB來存儲。

MongoDB官網:https://www.mongodb.org/

動手試試

第一步:引入依賴

Spring Boot中可以通過在pom.xml中加入spring-boot-starter-data-mongodb引入對mongodb的訪問支持依賴。它的實現依賴spring-data-mongodb。是的,您沒有看錯,又是spring-data的子項目,之前介紹過spring-data-jpa、spring-data-redis,對於mongodb的訪問,spring-data也提供了強大的支持,下面就開始動手試試吧。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

第二步:創建用戶實體User

@Data
public class User {

    @Id
    private Long id;

    private String username;
    private Integer age;

}

第三步:實現用戶實體User的數據訪問對象UserRepository

public interface UserRepository extends MongoRepository<User, Long> {

    User findByUsername(String username);

}

在Spring Data的抽象下,是不是同其他Spring Data子項目一樣的簡潔、好用、易學!

第四步:編寫單元測試

@SpringBootTest(classes = Chapter61Application.class)
public class ApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void test() throws Exception {
        userRepository.deleteAll();

        // 創建三個User,並驗證User總數
        userRepository.save(new User(1L, "didi", 30));
        userRepository.save(new User(2L, "mama", 40));
        userRepository.save(new User(3L, "kaka", 50));
        Assertions.assertEquals(3, userRepository.findAll().size());

        // 刪除一個User,再驗證User總數
        User u = userRepository.findById(1L).get();
        userRepository.delete(u);
        Assertions.assertEquals(2, userRepository.findAll().size());

        // 刪除一個User,再驗證User總數
        u = userRepository.findByUsername("mama");
        userRepository.delete(u);
        Assertions.assertEquals(1, userRepository.findAll().size());
    }

}

這裡注意所使用的Assertions是Spring Boot 2.4之後整合的版本,之前的版本還是使用Assert

第五步:參數配置

通過上面的例子,我們可以輕而易舉的對MongoDB進行訪問,但是實戰中,應用伺服器與MongoDB通常不會部署於同一臺設備之上,這樣就無法使用自動化的本地配置來進行使用。這個時候,我們也可以方便的配置來完成支持,只需要在application.properties中加入mongodb服務端的相關配置,具體示例如下:

spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test

在嘗試此配置時,記得在mongo中對test庫創建具備讀寫權限的用戶(用戶名為name,密碼為pass),不同版本的用戶創建語句不同,注意查看文檔做好準備工作

若使用mongodb 2.x,也可以通過如下參數配置,該方式不支持mongodb 3.x。

spring.data.mongodb.host=localhost spring.data.mongodb.port=27017

題外話

MongoDB雖然在過去很長一段時間,受到不少的關注,但由於其在各方面都表現中庸,這兩年間似乎越來越少聽到或者看到關於MongoDB的大規模應用場景。

就筆者所接觸的很多以往的使用場景也都開始在使用ES來取代,以獲得更好的性能表現。所以,接下來我們會講講Spring Boot中如何使用ES,關注我,持續獲得更多Spring Boot的技術乾貨!

本系列免費教程連載Web端地址(建議收藏):

https://blog.didispace.com/spring-boot-learning-2x/

代碼示例

本文的相關例子可以查看下面倉庫中的chapter6-1目錄:

Github:https://github.com/dyc87112/SpringBoot-Learning/Gitee:https://gitee.com/didispace/SpringBoot-Learning/

如果您覺得本文不錯,歡迎Star支持,您的關注是我堅持的動力!

點擊領取:大佬的算法刷題筆記PDF

相關焦點

  • Spring Boot 2.X 實戰--Spring Boot 整合 MongoDB
    原始碼倉庫:https://github.com/zhshuixian/learn-spring-boot-2碼云:https://gitee.com/ylooq/learn-spring-boot-2博客:https://blog.csdn.net/u010974701系列文章在線閱讀:掃碼關注「
  • Spring Boot系列(八) Spring Boot中使用MongoDB資料庫
    Spring Boot為使用MongoDB提供了很多便利,包括spring-boot-starter-data-mongodb 'Starter POM'。引入spring-boot-starter-data-mongodb包,在pom.xml配置文件中增加如下內容(基於之前章節「Spring Boot 構建框架」中的pom.xml文件):
  • spring-boot-starter-mongodb-pool
    在日常工作中,我們通過Spring Data Mongodb來操作Mongodb資料庫,在Spring Boot中只需要引入spring-boot-starter-data-mongodb
  • Spring Boot 使用 Graylog 收集日誌
    ;version>0.0.1-SNAPSHOT</version> <name>springboot2_graylog</name> <description>springboot2_graylog</description> <properties>
  • Spring Boot 2.x基礎教程:快速入門
    Language:使用什麼程式語言,Java、Kotlin還是Groovy;本教程將採用Java為主編寫,以方便更多讀者入門學習。Spring Boot:選用的Spring Boot版本;這裡將使用當前最新的 2.1.3版本。
  • 芋道 Spring Boot MongoDB 入門
    2. 快速入門示例代碼對應倉庫:lab-16-spring-data-mongodb 。本小節,我們會使用 spring-boot-starter-data-mongodb 自動化配置 Spring Data MongoDB 主要配置。
  • Spring Boot 2.x基礎教程:使用Swagger2構建強大的API文檔
    又碰到了運營號直接拿了文章就推,導致沒法標原創。該整合項目的Github:https://github.com/SpringForAll/spring-boot-starter-swagger。如果您覺得它好用,歡迎Star支持我們!
  • Spring Boot中增強對MongoDB的配置(連接池等)
    之前在博客上轉載了一篇關於《如何在Spring Boot中是配置MongoDB的連接數》的文章,相信關注我博客的朋友們肯定也看過了。
  • Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
    Docker 技術發展為微服務落地提供了更加便利的環境,使用 Docker 部署 Spring Boot 其實非常簡單,這篇文章我們就來簡單學習下。
  • Spring Boot 2.x基礎教程:實現文件上傳
    第二步:在pom.xml中引入模版引擎依賴:<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-thymeleaf</artifactId
  • Spring Boot(十七):使用 Spring Boot 上傳文件
    1、pom 包配置我們使用 Spring Boot 版本 2.1.0、jdk 1.8、tomcat 8.0。<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE<
  • Spring Boot (十九):使用 Spring Boot Actuator 監控應用
    為了保證 actuator 暴露的監控接口的安全性,需要添加安全控制的依賴spring-boot-start-security依賴,訪問應用監控端點時,都需要輸入驗證信息。Security 依賴,可以選擇不加,不進行安全管理,但不建議這麼做。
  • Spring Boot 2.x 實戰--SQL資料庫(Spring Data JPA)
    大數據小先博客主頁:https://me.csdn.net/u010974701原始碼倉庫:https://github.com/zhshuixian/learn-spring-boot-2上一小節主要介紹了 Spring Boot  2.x 實戰--整合 Log4j2 與 Slf4j 實現日誌列印和輸出到文件。
  • Spring Cloud Alibaba基礎教程:Sentinel使用Apollo存儲規則
    使用Apollo存儲限流規則Sentinel自身就支持了多種不同的數據源來持久化規則配置,目前包括以下幾種方式:本文我們就來一起動手嘗試一下,如何使用Apollo來存儲限流規則。準備工作下面我們將同時使用到 Apollo和 SentinelDashboard,所以可以先把 Apollo和 SentinelDashboard啟動起來。
  • 使用 Docker 部署 Spring Boot 項目
    一個簡單 Spring Boot 項目在 pom.xml 中 ,使用 Spring Boot 2.0 相關依賴<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent
  • Spring Boot 2.x基礎教程:Swagger接口分類與各元素排序問題詳解
    作者 | 翟永超來源 | didispace.com/spring-boot-learning-21-2-4/之前通過Spring Boot 2.x基礎教程:使用Swagger2構建強大的API文檔一文,我們學習了如何使用Swagger為Spring Boot項目自動生成API文檔,有不少用戶留言問了關於文檔內容的組織以及排序問題。
  • 使用 Jenkins X、Kubernetes 和 Spring Boot 實現 CI/CD
    Jenkins X 對於版本名稱有53個字符的限制,oktadeveloper/okta-spring-boot-jenkinsx-example 將會使它超過兩個字符。為 git 用戶名、初始化 git 和提交消息都選擇默認值。如果你不想使用個人帳戶,可以選擇要使用的組織。運行以下命令以查看應用程式的 CI/CD 流水線。
  • Spring Boot 2.0 的快速入門(圖文教程)
    目前,Spring Boot 版本是 2.x 版本。1.1.1 Spring Boot 2.x 特性Spring Boot 2.x 具有哪些生產的特性呢?常用特性如下:SpringApplication 應用類;自動配置;外化配置;內嵌容器;Starter 組件。
  • 使用Spring Boot Operator將Spring Boot部署到Kubernetes
    Java項目打包鏡像用Maven/Gradle插件比較多,我的另一篇文章構建Spring Boot的Docker鏡像[2]有介紹,這裡再介紹一個新的Google開源的插件Jib,該插件使用起來比較方便。
  • Spring Boot2 系列教程(三)理解 spring-boot-starter-parent
    ,pom.xml 坐標文件中都有如下一段引用:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> &