问答微服务的简单增删改示例

问答应用程序将有两个域模型-Question和Answer。由于一个问题可以有很多答案,我们将定义一个Question与Answer实体之间的一对多关系。

我们将首先引导项目并配置PostgreSQL数据库。之后,我们将定义用于从PostgreSQL访问数据的域模型和存储库。最后,我们将编写RESTAPI并使用Postman测试这些API。

引导项目

您可以使用SpringCLI工具通过在终端中键入以下命令来引导SpringBoot项目。

项目目录结构

配置PostgreSQL首先是第一件事。让我们配置SpringBoot以使用PostgreSQL作为我们的数据源。您可以通过在src/main/resources/application.properties文件中添加PostgreSQL数据库URL,用户名和密码来实现这一点-

上述文件中的最后两个属性是针对Hibernate的。它是spring-data-jpa附带的默认JPA供应商。虽然Hibernate与数据库无关,但我们可以指定当前的数据库方言,以便为该数据库生成更好的SQL查询。该ddl-auto属性用于根据应用程序中的实体类自动创建表。

定义域模型

域模型是映射到数据库中相应表的类。我们的应用程序中有两个主要的域模型-Question和Answer。这两个域模型都有一些常见的审计相关字段,如createdAt和updatedAt。

最好在单独的基类中抽象出这些常见字段,这就是我们在这篇文章中要做的事情。我们将创建一个名为的抽象类AuditModel来保存这些字段。

此外,我们将使用SpringBoot的JPA审计功能在数据库中插入/更新特定实体时自动填充createdAt和updatedAt值。

1.AuditModel

以下AuditModel类将由其他实体扩展。它包含@EntityListeners(AuditingEntityListener.class)将在实体持久化时自动填充createdAt和注释的注释updatedAt。

启用JPA审核

请注意,要启用JPA审核,您需要将@EnableJpaAuditing注释添加到其中一个配置类。所以打开主类PostgresDemoApplication.java并添加@EnableJpaAuditing注释,如此-

2.问题模型

以下是该Question实体。它映射到questions数据库中指定的表。

请注意,我正在使用a@SequenceGenerator来生成问题id。您还可以SERIAL通过指定@GeneratedValue(strategy=GenerationType.IDENTITY)注释来使用PostgreSQL列。但在这种情况下,SequenceGenerator的表现更好。

3.答案模型

以下是Answer类的定义。它包含一个@ManyToOne注释,用于声明它与Question实体具有多对一关系。

定义存储库

以下存储库将用于访问数据库中的问题和答案。

1.QuestionRepository

2.AnswerRepository

构建RESTAPI

最后,让我们在控制器内编写RESTAPI,以便对问题和答案执行CRUD操作。

1.QuestionController

2.AnswerController

自定义ResourceNotFoundException类

问题和答案RESTAPI会ResourceNotFoundException在数据库中找不到问题或答案时抛出。以下是ResourceNotFoundException的定义

异常类包含一个@ResponseStatus(HttpStatus.NOT_FOUND)注释,用于告知springboot在响应404NOTFOUND此异常时以状态响应。

运行应用程序并通过邮递员测试API

我们已经完成了构建RESTAPI的工作。是时候运行应用程序并测试这些API了。

启动终端并从应用程序的根目录中键入以下命令以运行它-

mvnspring-boot:run应用程序将在默认端口上启动8080。

以下屏幕截图显示了如何使用Postman测试API。

1.创建问题POST/questions

2.获取分页问题GET/questions?page=0&size=2&sort=createdAt,desc

3.创建答案POST/questions//answers

4.获得问题的所有答案GET/questions//answers

结论

以上就是问答微服务框架实现的简单增删改和PostgreSQL的简单实用.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181122A1J4FP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券