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

本教程前两篇文章:

原文地址:https://cloud.tencent.com/developer/article/2181285

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340