1. 程式人生 > 其它 >MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDB

MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDB

本教程的前兩篇文章,分別介紹瞭如何使用 Node.js,普通的 Java 應用以及 SpringBoot 應用對 MongoDB 進行讀寫訪問。

本文介紹另一種採取 Restful API 的方式來操縱 MongoDB.

使用 SpringBoot 開發 Restful API 對 MongoDB 進行讀寫訪問

通過 Spring Boot 構造出 Restful API,這樣可以直接在瀏覽器裡通過呼叫 Restful API,對 MongoDB 進行增刪查改了。

先看按照本教程介紹的步驟,實現的最終效果。

假設我本地 MongoDB 的資料庫裡有一張表 book,只有一條記錄,id 為 1.

通過瀏覽器裡的這個 url 根據 id 讀取該記錄:http://localhost:8089/bookmanage/read?id=1

採取如下 url 進行記錄的建立:

http://localhost:8089/bookmanage/create?id=2&name=Spring&author=Jerry


記錄搜尋操作的 url:http://localhost:8089/bookmanage/search?name=*

記錄的刪除:刪除 id 為 2 的記錄

http://localhost:8089/bookmanage/delete?id=2

下面是上述功能的實現細節。

  1. 建立一個新的 controller,位於資料夾 src/main/java 下。

這個 controller 加上註解 @RestController.

@RestController 註解相當於 @ResponseBody@Controller 這兩個註解提供的功能的並集。

這裡有一個知識點就是,如果用註解 @RestController 定義一個 Controller,那麼這個 Controller 裡的方法無法返回 jsp 頁面或者 html 頁面,因為 @ResponseBody 註解在起作用。所以即使配置了檢視解析器 InternalResourceViewResolver 也不會生效,此時返回的內容就是 @RestController 定義的控制器方法裡返回的內容。

  1. 以讀操作為例,通過註解 @GetMapping 定義了讀操作 Restful API 的 url 為bookmanage/read.

@RequestParam 定義了 url:bookmanage/read 後面的引數為 id 或者 name.

讀操作最終將會使用我們之前介紹過的 Java 訪問 MongoDB 的方法,即通過@Autowired 注入的 BookRepository 例項完成對 MongoDB 的操作。

  1. 建立操作的原始碼:
@GetMapping("/bookmanage/create")
public Book create(
@RequestParam(value="id", defaultValue="") String id,
@RequestParam(value="name", defaultValue="noname") String name,
@RequestParam(value="author", defaultValue="noauthor") String author
){
     Book book = repository.save(new Book(id,name,author));
     return book;
}
  1. 刪除操作的原始碼:
@GetMapping("/bookmanage/delete")
public boolean delete(
@RequestParam(value="id", defaultValue="") String id
){
    //if no record
     if(repository.findById(id)==null)
           return false;
     // do database delete
     repository.deleteById(id);
    return true;
}

如何在 SAP 雲平臺上使用 MongoDB

我想在 SAP 雲平臺的 Cloud Foundry 環境下使用 MongoDB 服務,但是在 Service Marketplace 上找不到這個服務。

命令列 cf marketplace 返回的結果也沒有 MongoDB 相關的服務:

解決方案

退回到 SAP 雲平臺的 Global Account,點選 Entitlement,發現沒有給 Subaccount 分配 MongoDB:

Quota 分配成 1,儲存即可。

再回到 organization 的 space 下面,發現現在 MongoDB 服務已經處於可用狀態了。

命令列 cf marketplace 現在能夠看到 MongoDB 服務的版本了:

下面是在 SAP 雲平臺 CloudFoundry 環境使用 MongoDB 服務的詳細步驟。

  1. 使用命令列 cf marketplace 檢視當前 SAP 雲平臺的 MongoDB 服務的版本號:在我使用的 SAP 雲平臺上是 v3.0-dev:

使用如下命令列建立一個服務例項:

cf create-service mongodb v3.0-dev mongo-service

  1. 到 Java 專案根目錄下,使用命令列 mvn package:

能看到如下的輸出:


該命令會生成一個 hcp-cf-mongodb-tutorial-1.0-SNAPSHOT.jar

  1. 編輯 manifest.yml,指定部署到 SAP 雲平臺上的程式名稱:
  1. 使用命令列 cf push進行部署。

部署成功後,在 Cockpit 裡能看到該應用處於 Started 狀態:



瀏覽器訪問該應用,能看到如下輸出:

該輸出是 Java 專案裡的 RootController 生成的:

最後我們對 SAP UI5 Repository 和 MongoDB Repository 進行比較,作為本系列的結尾。

UI5 Repository

從本地通過 Eclipse team provider 上傳到 ABAP gateway system 的 UI5 應用,都會自動生成一個 UI5RepositoryPathMapping.xml 檔案,裡面記錄的是 debug version 的指令碼檔名稱和路徑的對映關係。如下圖所示:

控制這個對映檔案的訪問工具類 manipulation utility 的名稱:

UI5/CL_UI5_REP_PATH_MAPPER

SpringBoot 應用裡的 MongoDB Repository

和 ADBC 與 JDBC 不同,通過 MongoDB Repository 訪問 MongoDB 資料庫,並不會在程式碼中出現用字串拼接的 SQL 語句:

例如我們檢視 findByName 的定義:

findByName 的實現:第 20 行程式碼構造一個 Query 例項,然後將其傳入 21 行 mongoTemplatefind 方法:

總結

本文首先介紹瞭如何使用 SpringBoot 應用開發 Restful API,從而能夠在瀏覽器裡就能對 MongoDB 的讀寫操作進行測試,接著介紹瞭如何在通用的雲平臺 CloudFoundry 環境裡消費 MongoDB 服務。

本教程前兩篇文章: