写点什么

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

作者:Jerry Wang
  • 2022 年 5 月 06 日
  • 本文字数:2165 字

    阅读完需:约 7 分钟

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 服务。


本教程前两篇文章:


发布于: 2022 年 05 月 06 日阅读数: 14
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
MongoDB 入门教程系列之三:使用 Restful API  操作 MongoDB_数据库_Jerry Wang_InfoQ写作社区