第十一章 springboot + mongodb

来源:http://www.cnblogs.com/java-zhao/archive/2016/05/01/5449333.html
-Advertisement-
Play Games

1、mongodb在mac上的安裝 下載mongodb,https://www.mongodb.org/ 解壓縮到一個指定文件夾,如:/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6(這是我的mongodb的版本) 配置PATH 輸入命令:"vi ...


1、mongodb在mac上的安裝

  • 下載mongodb,https://www.mongodb.org/
  • 解壓縮到一個指定文件夾,如:/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6(這是我的mongodb的版本)
  • 配置PATH
    • 輸入命令:"vi ~/.bash_profile"
    • 添加如下兩句配置:
      1 export MONGO_HOME=/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6
      2 export PATH=$PATH:$MONGO_HOME/bin
      View Code
  • 創建數據目錄
    • 輸入命令:"sudo mkdir -p /data/db"
  • 賦予數據目錄許可權
    • 輸入命令:"sudo chmod 777 /data/db"
  • 啟動
    • 輸入命令:"mongod"
  • 退出:Ctrl+c

註意兩個錯:

參考:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/

 

2、代碼(4個部分)

2.1、com.xxx.firstboot.domain.Customer

 1 package com.xxx.firstboot.domain;
 2 
 3 import org.springframework.data.annotation.Id;
 4 
 5 /**
 6  * 測試mongodb
 7  */
 8 public class Customer {
 9     /**
10      * cid:該欄位用於mongodb的"_id"索引
11      * 1、需要@Id註解
12      * 2、取名無所謂,反正在mongodb中最後都會轉化為"_id"
13      * 3、定義為String類型,如果定義為Integer可能索引只會是0,會出現key重覆導致資料庫插不進去的情況;
14      * 4、該類型也是MongoRepository泛型中主鍵的ID
15      */
16     @Id
17     private String cid;
18     private String firstname;
19     private String secondname;
20 
21     public String getCid() {
22         return cid;
23     }
24 
25     public void setCid(String cid) {
26         this.cid = cid;
27     }
28 
29     public String getFirstname() {
30         return firstname;
31     }
32 
33     public void setFirstname(String firstname) {
34         this.firstname = firstname;
35     }
36 
37     public String getSecondname() {
38         return secondname;
39     }
40 
41     public void setSecondname(String secondname) {
42         this.secondname = secondname;
43     }
44 
45 }
View Code

說明:生成的colletion(類似於MySQL中的表)就是domain類的簡單類名,eg.customer。

註意:

  • cid:該欄位用於mongodb的"_id"索引
  • 需要@Id註解
  • 取名無所謂,反正在mongodb中最後都會轉化為"_id"
  • 定義為String類型,如果定義為Integer可能索引只會是0,會出現key重覆導致資料庫插不進去的情況
  • 該類型也是MongoRepository泛型中主鍵的ID 

2.2、com.xxx.firstboot.mongo.CustomerRepository

 1 package com.xxx.firstboot.mongo;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.data.mongodb.repository.MongoRepository;
 6 
 7 import com.xxx.firstboot.domain.Customer;
 8 
 9 /**
10  * MongoRepository<Customer, Integer>
11  * 第一個參數:T 操作的vo
12  * 第二個參數:ID T的主鍵類型
13  * 作用:該介面實現了CRUD方法
14  * 
15  * 註意:
16  * 1、由於boot使用了spring-data-mongodb,所以我們不需要寫該介面的實現,
17  *   當我們運行程式的時候,spring-data-mongodb會動態創建
18  * 2、findBySecondname命名是有講究的,Secondname(是Customer的屬性)若改為lastname就會報找不到屬性lastname的錯誤
19  */
20 public interface CustomerRepository extends MongoRepository<Customer, String> {
21     public Customer findByFirstname(String firstname);
22     public List<Customer> findBySecondname(String secondname);
23 }
View Code

說明:該介面就是我們的業務介面。

註意:

  • 繼承MongoRepository<T, ID>介面
    • T:操作的domain,例如com.xxx.firstboot.domain.Customer
    • ID:T的主鍵類型(@ID修飾的屬性),通常就是String
    • 該介面的實現類也實現了CRUD操作
  • 我們的介面只需要定義方法的定義,不需要做實現,spring-data-mongodb會在程式運行的時候動態創建
    • 方法的命名是有講究的,與domain的屬性有關(可以再測測) 

2.3、com.xxx.firstboot.web.CustomerController

 1 package com.xxx.firstboot.web;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.RequestMethod;
 8 import org.springframework.web.bind.annotation.RequestParam;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 import com.xxx.firstboot.domain.Customer;
12 import com.xxx.firstboot.mongo.CustomerRepository;
13 
14 import io.swagger.annotations.Api;
15 import io.swagger.annotations.ApiOperation;
16 
17 @RestController
18 @RequestMapping("/customer")
19 @Api("customer相關的API,用於測試mongodb")
20 public class CustomerController {
21 
22     @Autowired
23     private CustomerRepository customerRepository;
24 
25     @ApiOperation("增加一個Customer")
26     @RequestMapping(value = "/addCustomer", method = RequestMethod.GET)
27     public Customer addCustomer(@RequestParam("firstname") String firstname,
28                                 @RequestParam("secondname") String secondname) {
29         Customer customer = new Customer();
30         customer.setFirstname(firstname);
31         customer.setSecondname(secondname);
32         return customerRepository.save(customer);
33     }
34 
35     @ApiOperation("獲取所有的Customer")
36     @RequestMapping(value = "/getAllCustomer", method = RequestMethod.GET)
37     public List<Customer> getAllCustomer() {
38         return customerRepository.findAll();
39     }
40 
41     @ApiOperation("根據firstname獲取Customer")
42     @RequestMapping(value = "/getCustomerByFirstname", method = RequestMethod.GET)
43     public Customer getCustomerByFirstname(@RequestParam("firstname") String firstname) {
44         return customerRepository.findByFirstname(firstname);
45     }
46 
47     @ApiOperation("根據secondname獲取多個Customer")
48     @RequestMapping(value = "/getCustomerBySecondname", method = RequestMethod.GET)
49     public List<Customer> getCustomerBySecondname(@RequestParam("secondname") String secondname) {
50         return customerRepository.findBySecondname(secondname);
51     }
52 
53     @ApiOperation("根據id刪除Customer")
54     @RequestMapping(value = "/deleteCustomerById", method = RequestMethod.GET)
55     public boolean deleteCustomerById(@RequestParam("cid") String cid) {
56         customerRepository.delete(cid);
57         return true;
58     }
59 }
View Code

說明:直接註入我們自己的業務介面,然後進行相應的操作即可。

此時,就可以進行測試了。只是此時使用的都是mongodb的預設信息。

  • host:localhost
  • port:27017
  • 資料庫:test
  • collection:customer(domain類的簡單類名)

2.4、application.properties

1 #mongodb note:mongo3.x will not use host and port,only use uri
2 spring.data.mongodb.host=192.168.21.54
3 spring.data.mongodb.port=27017
4 spring.data.mongodb.uri=mongodb://192.168.21.54:27017/myfirstMongodb
View Code

說明:如果需要指定host、port、資料庫,需要在application.properties文件中配置以上信息。

註意:

  • 配置必須以"spring.data.mongodb"為首碼
  • 如果是mongo3.x的話,host和port沒用,需要uri。(未測過)
  • uri = mongodb://host:port/資料庫

 

3、測試

啟動應用,啟動mongo服務進程,打開swagger,使用robomongo客戶端觀察mongodb存儲情況。

沒有在application.properties中設置屬性。

設置屬性後,

 

參考:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-mongodb

https://spring.io/guides/gs/accessing-data-mongodb/ 其中的例子就是對sample代碼的解釋

http://www.jianshu.com/p/e59cd2dc5274 關於mongodb主鍵

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-nosql.html 關於mongo2.x與3.x對host、port、uri配置的支持。


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

-Advertisement-
Play Games
更多相關文章
  • 引言: 以前在面試的過程中,總有面試官問道:你做過sql性能優化嗎?對此,我的答覆是沒有。一次沒有不是自己的錯誤,兩次也不是,但如果是多次呢?今天痛下決心,把有關sql性能優化的相關知識總結一下,以便在不久的將來,我的回答不是“沒有”,總能多多少少說一些東西。算是長進吧。說到性能優化,本人感覺到有必 ...
  • 簡介 之前做過一個文件名稱生成器,通過Webservice讀取XML文件並將其通過Json傳到客戶端中的combobx,用戶通過combobox選擇要生成文件的名稱模板,點擊生成則會產生一個文件名稱並保存到資料庫中。 涉及到的編程內容 webservice,XML,Access,Winform We ...
  • 1.繼上一篇隨筆,鏈接點我,解決手機端cookie的問題。 2.上次用cookie+redis實現了session,並且手機瀏覽器可能回傳cookies有問題,所以最後用js取出cookie跟在請求的url後面。 3.但是今天發現了新的問題,js取cookie存的sessionId為空,情況如下: ...
  • 今天在做一個聯繫人管理的C#設計時,遇到了這個問題,我需要將父窗體中的textBox中的值傳到子窗體併進行資料庫查詢操作,我用了new 父窗體().textBox.text;來進行值傳遞,然而並無卵用,經過多次試驗,找到了一個比較簡單的解決方法: 父窗體:Logout 子窗體:Affirm 父窗體文 ...
  • 1 1 <appSettings> 2 2 <add key="webpages:Version" value="2.0.0.0" /> 3 3 <add key="webpages:Enabled" value="false" /> 4 4 <add key="PreserveLoginUrl" ...
  • 面試的時候遇到的一個題目: 函數類型:List<string> FindOut(string s1, Dictionary<string,int> dict1) 題目要求:將沒有分隔符的字元串s1根據字典dict1進行拆分單詞,若能夠完全拆分,則依次輸出拆分後的單詞;若不能完全拆分,則輸出null。 ...
  • 最近工作的時候遇到一個問題,根據Web端接收到的對象obj1,更新對應的對象值ogj2。先判斷obj1中屬性值是否為null, 若不等於null,則更新obj2中對應屬性值;若等於null,則保持obj2中對應屬性值不變。 先創建Student Class: 1 using System; 2 us ...
  • 垃圾回收主要考慮三件事情:哪些記憶體需要回收?什麼時候回收?如何回收? 一、哪些記憶體需要回收? 堆記憶體:對於JVM 來說,垃圾回收主要是針對堆記憶體中的對象實例。 方法區:垃圾收集行為在方法區是比較少出現的,一般來說,這個區域的回收“成績”比較難以令人滿意,尤其是類型的卸載,條件相當苛刻,但是這部分區域 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...