讓Mongo在Spring中跑起來

来源:https://www.cnblogs.com/yulinfeng/archive/2019/01/06/10230832.html
-Advertisement-
Play Games

本文標題為《讓Mongo在Spring中跑起來》,旨在Spring中如何成功連接MongoDB並對其進行增刪改查等操作,由於筆者也是剛接觸,對其中的一些原由也不甚瞭解,若有錯誤之處,敬請指正。 習慣了MySQL在Spring中整合時填寫各種各樣的連接參數,本來只想做一件簡單的資料庫插入查詢而已 ...


本文標題為《讓Mongo在Spring中跑起來》,旨在Spring中如何成功連接MongoDB並對其進行增刪改查等操作,由於筆者也是剛接觸,對其中的一些原由也不甚瞭解,若有錯誤之處,敬請指正。

   習慣了MySQL在Spring中整合時填寫各種各樣的連接參數,本來只想做一件簡單的資料庫插入查詢而已,翻遍整個互聯網通篇都是複製粘貼抄襲的配置,連接數的多少,超時時間的多少等等。

  SprintBoot的出現,秉持**約定大於配置**的目標,可以使你免去許多配置的煩腦,“約定”即是大多數人都這麼做,你這麼做估計也沒問題,反正就是能跑起來,你要用高級特性也可以也支持自定義配置。所以本文采用SpringBoot力求達到零XML配置。   不得不說,Spring如今已經成為Java EE事實上的標準,可以說Spring出品必屬精品,其中與資料庫打交道的部分,Spring也替我們做好了封裝,本文操作MongoDB的API不需要自己再在mongo-driver的基礎上再封裝一層,而是直接使用Spring提供的spring-data-mongo模塊,這個模塊加上SpringBoot的結合,淋漓盡致地展現了什麼叫做“約定大於配置”。   為了便於註入Bean,我們在maven中引入了以下兩個包:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  SprintBoot的版本號為2.0.2.RELEASE。   為了驗證是否能對MongoDB進行操作,我們還需要再引入Spring的單元測試包:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

  起初我想著,這應該需要配置MongoDB的地址、用戶名、密碼什麼的吧,所以我起初寫了一個配置類,企圖使用@Configuration的方式來配置MongoDB連接,後來發現,引入了spring-data-mongo在我們啟動SpringBoot時,已經為我們創建好了一個預設的MongoDB連接,不需要我們再去重覆的配置(當然如果需要更高級的自定義配置也是可以自己配置的),只需要按照格式即可在啟動完成SpringBoot時,自動創建MongoDB連接。

  在application.properties中配置以下:
spring.data.mongodb.uri=mongodb://okevin:123456@localhost:27017/recommended
  即可通過SpringBoot自動為我們創建MongoDB連接,在代碼中直接引用MongoTemplate類。

  我們先通過MongoDB可視化管理Robo 3T連入對應的資料庫,併在資料庫中新創建一個MongoDB集合“user”,在代碼中需要我們創建一個與之對應的Java實體類User:

 1 package com.mongo.domain;
 2 
 3 import lombok.Data;
 4 import lombok.ToString;
 5 import org.springframework.data.annotation.Id;
 6 import org.springframework.data.mongodb.core.mapping.Document;
 7 import org.springframework.data.mongodb.core.mapping.Field;
 8 
 9 import java.io.Serializable;
10 
11 /**
12  * @author OKevin
13  * @description: MongoDB實體映射類
14  * @date 2019-01-06 12:10
15  */
16 @Data
17 @ToString
18 //以上兩個註解使用的是lombok,可減少代碼中getter/setter代碼
19 @Document(collection = "user") 
20 public class User implements Serializable {
21 
22     private static final long serialVersionUID = 5094995541812833015L;
23     /**
24      * 主鍵使用此註解
25      */
26     @Id
27     private String id;
28 
29     /**
30      * 欄位使用此註解
31      */
32     @Field
33     private String name;
34 }
  User實體類對應MongoDB資料庫中的collection集合。   接下來就是操作MongoDB資料庫中user集合的一些增刪改查具體邏輯,很簡單隻需要在類中註入MongoTemplate類即可。
 1 package com.mongo.dao;
 2 
 3 import com.mongo.domain.User;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.data.mongodb.core.MongoTemplate;
 6 import org.springframework.data.mongodb.core.query.Criteria;
 7 import org.springframework.data.mongodb.core.query.Query;
 8 import org.springframework.data.mongodb.core.query.Update;
 9 import org.springframework.stereotype.Component;
10 
11 import java.util.List;
12 
13 /**
14  * @author OKevin
15  * @description: 數據層操作類
16  * @date 2019-01-06 19:52
17  */
18 @Component
19 public class UserDao {
20 
21     @Autowired
22     private MongoTemplate mongoTemplate;
23 
24     /**
25      * 保存用戶
26      * @param user 返回保存的用戶
27      */
28     public void saveUser(User user) {
29         mongoTemplate.save(user);
30     }
31 
32     /**
33      * 根據名字查詢用戶
34      * @param name 名字
35      * @return 用戶
36      */
37     public List<User> findUserByName(String name) {
38         Query query = new Query(Criteria.where("name").is(name));
39         List<User> users = mongoTemplate.find(query, User.class);
40         return users;
41     }
42 
43     /**
44      * 更新用戶
45      * @param user 待更新的用戶
46      */
47     public void updateUser(User user) {
48         Query query = new Query(Criteria.where("id").is(user.getId()));
49         Update update = new Update().set("name", user.getName());
50         mongoTemplate.updateFirst(query, update, User.class);
51     }
52 
53     /**
54      * 根據MongoDB的_id刪除用戶
55      * @param Id _id
56      */
57     public void deleteUserById(String Id) {
58         Query query = new Query(Criteria.where("id").is(Id));
59         mongoTemplate.remove(query, User.class);
60     }
61 }
  最後是單元測試的代碼:
 1 package com.mongo;
 2 
 3 import com.mongo.dao.UserDao;
 4 import com.mongo.domain.User;
 5 import org.junit.Test;
 6 import org.junit.runner.RunWith;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.boot.test.context.SpringBootTest;
 9 import org.springframework.context.annotation.ComponentScan;
10 import org.springframework.test.context.ContextConfiguration;
11 import org.springframework.test.context.junit4.SpringRunner;
12 
13 import java.util.List;
14 
15 @RunWith(SpringRunner.class)
16 @SpringBootTest
17 public class SpringDataMongoDemoApplicationTests {
18 
19     @Autowired
20     private UserDao userDao;
21 
22     @Test
23     public void contextLoads() {
24     }
25 
26     @Test
27     public void testSaveUser() {
28         User user = new User();
29         user.setName("test");
30         userDao.saveUser(user);
31     }
32 
33     @Test
34     public void testFindUserByName() {
35         String name = "test";
36         List<User> users = userDao.findUserByName(name);
37         System.out.println(users);
38     }
39 
40     @Test
41     public void testUpdateUser() {
42         String id = "5c31f93f91ffb269a774b860";
43         User user = new User();
44         user.setId(id);
45         user.setName("test2");
46         userDao.updateUser(user);
47     }
48 
49     @Test
50     public void testDeleteUserById() {
51         String id = "5c31f93f91ffb269a774b860";
52         userDao.deleteUserById(id);
53     }
54 }
  執行單元測試運行正常,回到Robo 3T也發現執行成功。

  由此可見對於基本的一些操作,大可不必在Spring中配置一些MongoDB的連接,只需要一句配置提供地址、用戶名、密碼即可,軟體開發在學習特別是在初學的過程,讓一切先跑起來再說。

  本文涉及到的完整代碼已上傳至GitHub:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/%E8%AE%A9Mongo%E5%9C%A8Spring%E4%B8%AD%E8%B7%91%E8%B5%B7%E6%9D%A5/spring-data-mongo-demo

 

 

這是一個能給程式員加buff的公眾號 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 空對象模式取代簡單的 NULL 值判斷,將空值檢查作為一種不做任何事情的行為。 介紹 在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。 類圖描述 代碼實現 1、定義抽象類 2、定義實體類 ...
  • 適配器模式是作為兩個不相容的介面之間的橋梁。這種類型的設計模糊屬於結構性模式,它結合了兩個獨立介面的功能 ...
  • Django是Python中一個非常牛逼的web框架,他幫我們做了很多事,裡邊也提前封裝了很多牛逼的功能,用起來簡直不要太爽,在寫網站的過程中,增刪改查這幾個基本的功能我們是經常會用到,Django把這系列複雜的邏輯性東西都封裝成了方法,供我們直接使用,在使用過程中的體會是簡單到令人髮指,一個簡單的 ...
  • 前言 開心一刻 快過年了,大街上,爺爺在給孫子示範摔炮怎麼放,嘴裡還不停念叨:要像這樣,用勁甩才能響。示範了一個,兩個,三個... 孫子終於忍不住了,抱著爺爺的腿哭起來:爺呀,你給我剩個吧! 新的一年祝大家:健健康康,快快樂樂! github:https://github.com/youzhibin ...
  • 相關文章 如何慢慢地快速成長起來? 成長的故事之Spring Core系列 你是如何看待Spring容器的,是這樣子嗎? Spring的啟動過程,你有認真思考過嗎?(待寫) 面向切麵編程,你指的是Spring AOP嗎?(待寫) Spring的聲明式事務,這次你徹底明白了吧?(待寫) §如何提問,如 ...
  • 面向對象:字典實現人狗大戰、自定義類、調用類中的方法、類的內容查看、修改、添加、使用類來完成人狗大戰 ...
  • 轉載於https://lamp.sh/install.html 安裝 發佈於: 2015年9月12日 更新於: 2019年1月3日 158,407 次圍觀 系統需求 系統支持:Amazon Linux 2018.03/Fedora 29/CentOS 6+/Debian 8+/Ubuntu 14+ ...
  • "標題" "列表" "引用" "代碼" 1.標題 顯示為: 一級標題 二級標題 三級標題 2.列表 有序列表 顯示為: 1. 列表1 2. 列表2 3. 列表3 無序列表 顯示為: 無序列表1 無序列表2 無序列表3 3.引用 顯示為: 引用 4.代碼 顯示為: `代碼` ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...