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
下面是上述功能的實現細節。
- 建立一個新的 controller,位於資料夾 src/main/java 下。
這個 controller 加上註解 @RestController
.
@RestController 註解相當於 @ResponseBody
和 @Controller
這兩個註解提供的功能的並集。
這裡有一個知識點就是,如果用註解 @RestController 定義一個 Controller,那麼這個 Controller 裡的方法無法返回 jsp 頁面或者 html 頁面,因為 @ResponseBody 註解在起作用。所以即使配置了檢視解析器 InternalResourceViewResolver 也不會生效,此時返回的內容就是 @RestController 定義的控制器方法裡返回的內容。
- 以讀操作為例,通過註解
@GetMapping
定義了讀操作 Restful API 的 url 為bookmanage/read.
@RequestParam 定義了 url:bookmanage/read 後面的引數為 id 或者 name.
讀操作最終將會使用我們之前介紹過的 Java 訪問 MongoDB 的方法,即通過@Autowired
注入的 BookRepository 例項完成對 MongoDB 的操作。
- 建立操作的原始碼:
@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;
}
- 刪除操作的原始碼:
@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 服務的詳細步驟。
- 使用命令列
cf marketplace
檢視當前 SAP 雲平臺的 MongoDB 服務的版本號:在我使用的 SAP 雲平臺上是v3.0-dev
:
使用如下命令列建立一個服務例項:
cf create-service mongodb v3.0-dev mongo-service
- 到 Java 專案根目錄下,使用命令列
mvn package
:
能看到如下的輸出:
該命令會生成一個 hcp-cf-mongodb-tutorial-1.0-SNAPSHOT.jar
:
- 編輯
manifest.yml
,指定部署到 SAP 雲平臺上的程式名稱:
- 使用命令列
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 行 mongoTemplate
的 find
方法:
總結
本文首先介紹瞭如何使用 SpringBoot 應用開發 Restful API,從而能夠在瀏覽器裡就能對 MongoDB 的讀寫操作進行測試,接著介紹瞭如何在通用的雲平臺 CloudFoundry 環境裡消費 MongoDB 服務。
本教程前兩篇文章: