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

語言: CN / TW / HK

本教程的前兩篇文章,分別介紹瞭如何使用 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 定義的控制器方法裡返回的內容。

@GetMapping

@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
mvn package

能看到如下的輸出:

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

manifest.yml
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 服務。

本教程前兩篇文章:

劃線

評論

複製