问答应用程序将有两个域模型-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的简单实用.
领取专属 10元无门槛券
私享最新 技术干货