使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API

你好朋友,

在本教程中,您将学习以下内容:

1.在Spring Boot中配置Spring Rest,Spring Data JPA和H2
2.使用Spring Boot创建Springful服务端点的Spring Rest,Spring Data JPA和H2的示例
3.使用Swagger测试Restful端点

1.在Spring Boot中配置Spring Rest,Spring Data JPA和H2

转到https://start.spring.io/并创建一个名为springRestAndDataJpaWithSpringBoot并具有以下依赖项的项目:

–网​​页

– JPA

– H2

宁静的API

注意:如果您不熟悉使用Spring Initializer创建Spring Boot项目,我建议您参考我以前的文章之一, 如何使用Spring Initializer创建Spring Boot项目 ,我在上面详细解释了如何创建Spring Boot项目。使用Spring Initializer。

2.使用Spring Boot创建Springful服务端点的Spring Rest,Spring Data JPA和H2的示例

在此示例中,我们将创建Rest端点以:

–创建员工资源

–检索员工名单

–检索员工

–更新员工资源

–删除员工资源

以下是项目的最终目录结构:

宁静的API

让我们看看我们需要创建的各种类和接口。

步骤1

从目录将项目springRestAndDataJpaWithSpringBoot(通过Spring Initializer创建的)导出到Eclipse。

第2步

打开Pom.xml,它应该具有从spring初始化器网站添加的所有依赖项以及一些默认依赖项。

另外,我手动添加了依赖项以启用Swagger。 Swagger基本上用于测试其余端点。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
<groupId>nl.blogspot.javasolutionsguide</groupId>
<artifactId>springRestAndDataJpaWithSpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springRestAndDataJpaWithSpringBoot</name><description>Demo project for Spring Boot</description><parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent><properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties><dependencies><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency><dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency><dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency><dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin>
</plugins></build></project>

第三步

Spring Boot自动创建了一个名为SpringRestAndDataJpaWithSpringBootApplication的Java文件。 此类用于启动Spring Boot应用程序。 我们需要在这个课上做以下事情:

–启用招摇

我们已经在Pom.xml中添加了Swagger的依赖关系。此外,为了在Spring Boot中启用Swagger,我们需要在@ EnableSwagger2注释的顶部放置
SpringRestAndDataJpaWithSpringBootApplication类。

–告诉Spring Boot扫描哪些软件包以考虑由Spring管理的bean

我们需要在SpringRestAndDataJpaWithSpringBootApplication类的顶部使用@ComponentScan(basePackages =“ nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot”)。

第四步

创建员工实体

package nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.entity;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;/*** @author JavaSolutionsGuide**/
@Entity
@Table(name="EMPLOYEE")
public class Employee {@Id@GeneratedValue(strategy= GenerationType.IDENTITY)private Long id;@Column(name="EMPLOYEE_NAME")private String name;@Column(name="EMPLOYEE_SALARY")private Integer salary;@Column(name="DEPARTMENT")private String department;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getSalary() {return salary;}public void setSalary(Integer salary) {this.salary = salary;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}
}

第5步

创建具有所有操作的Rest Controller。

package nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.controller;import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.entity.Employee;
import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.service.EmployeeService;/*** @author JavaSolutionsGuide**/
@RestController
public class EmployeeRestController {@Autowiredprivate EmployeeService employeeService;public void setEmployeeService(EmployeeService employeeService) {this.employeeService = employeeService;}@GetMapping("/api/employees")public List<Employee> getEmployees() {List<Employee> employees = employeeService.retrieveEmployees();return employees;}@GetMapping("/api/employees/{employeeId}")public Employee getEmployee(@PathVariable(name="employeeId")Long employeeId) {return employeeService.getEmployee(employeeId);}@PostMapping("/api/employees")public void saveEmployee(Employee employee){employeeService.saveEmployee(employee);System.out.println("Employee Saved Successfully");}@DeleteMapping("/api/employees/{employeeId}")public void deleteEmployee(@PathVariable(name="employeeId")Long employeeId){employeeService.deleteEmployee(employeeId);System.out.println("Employee Deleted Successfully");}@PutMapping("/api/employees/{employeeId}")public void updateEmployee(@RequestBody Employee employee,@PathVariable(name="employeeId")Long employeeId){Employee emp = employeeService.getEmployee(employeeId);if(emp != null){employeeService.updateEmployee(employee);}}}

第6步

创建Service接口,其中包含检索雇员列表,一名雇员,将雇员保存在数据库中,删除雇员以及更新和雇员所需的方法。

package nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.service;import java.util.List;import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.entity.Employee;/*** @author JavaSolutionsGuide**/
public interface EmployeeService {public List<Employee> retrieveEmployees();public Employee getEmployee(Long employeeId);public void saveEmployee(Employee employee);public void deleteEmployee(Long employeeId);public void updateEmployee(Employee employee);
}

步骤7

为在步骤6中创建的接口创建实现类

package nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.service.impl;import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.entity.Employee;
import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.repository.EmployeeRepository;
import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.service.EmployeeService;/*** @author JavaSolutionsGuide**/
@Service
public class EmployeeServiceImpl implements EmployeeService{@Autowiredprivate EmployeeRepository employeeRepository;public void setEmployeeRepository(EmployeeRepository employeeRepository) {this.employeeRepository = employeeRepository;}public List<Employee> retrieveEmployees() {List<Employee> employees = employeeRepository.findAll();return employees;}public Employee getEmployee(Long employeeId) {Optional<Employee> optEmp = employeeRepository.findById(employeeId);return optEmp.get();}public void saveEmployee(Employee employee){employeeRepository.save(employee);}public void deleteEmployee(Long employeeId){employeeRepository.deleteById(employeeId);}public void updateEmployee(Employee employee) {employeeRepository.save(employee);}
}

步骤8

创建一个存储库类,它将扩展Spring数据JPA JpaRepository,因此将提供开箱即用地执行CRUD操作的方法。

package nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.repository;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import nl.blogspot.javasolutionsguide.springRestAndDataJpaWithSpringBoot.entity.Employee;@Repository
public interface EmployeeRepository extends JpaRepository<Employee,Long>{}

步骤9

通过在application.properties文件中添加以下行来启用H2数据库Web控制台

spring.h2.console.enabled=true
spring.h2.console.path=/h2

Spring Boot将自动处理H2数据库的数据源的创建,但是我们也可以在application.properties文件中配置数据源,如下所示:

spring.datasource.url=jdbc:h2:file:~/test
spring.datasource.username=sa
spring.datasource.password=spring.datasource.driver-class-name=org.h2.Driver

第10步

这样,您就可以使用Spring Rest和带有h2数据库的spring data JPA创建您的Restful API。

现在,您只需要运行SpringRestAndDataJpaWithSpringBootApplication.java类,它将确保它将生成您的代码,将代码打包在jar中,然后将其部署到嵌入式tomcat服务器上。

步骤11

通过点击以下URL打开H2数据库控制台

http://localhost:8080/h2/

它将显示以下屏幕:

宁静的API

单击“连接”按钮,它将把您连接到H2数据库。 并且您可以看到EMPLOYEE表已创建,但是该表中没有数据,这与我们预期的一样。

宁静的API

3.使用Swagger测试Restful端点

要测试您的其余端点,请点击以下Swagger URL:

http://localhost:8080/swagger-ui.html

它将打开以下页面

宁静的API

单击“ employee-rest-controller”链接。 它将向您显示此控制器支持的操作,如下所示:

宁静的API

现在,我们可以在上面的屏幕快照中看到五个端点。 我们将一一测试。

挽救员工– / api / employees

我们要做的第一件事是在数据库中创建资源,为此我们将使用POST操作并使用/ api / employees端点。

宁静的API

单击saveEmployee并填写我们创建资源所需的所有必需数据,然后单击“试用”按钮。

宁静的API

这就是您的请求和响应的样子

宁静的API

如您所见,响应代码为200,表示成功,因此我们的记录应该已经在H2数据库中创建了。

让我们检查一下。

打开H2 Web控制台并查询EMPLOYEE表,您可以看到我们从Swagger UI推送的记录。

宁静的API

同样,从Swagger UI中再插入一名雇员,并输入以下数据:

宁静的API

再次查询数据库,您将在数据库中看到两条记录,如下所示:

宁静的API

获取员工-/ api /员工

现在,由于我们已经在数据库中插入了两个记录,我们将尝试在GET操作的帮助下并使用/ api / employees端点来检索这些记录,如下所示:

宁静的API

单击getEmployees,然后由于我们要检索所有雇员的列表,因此无需传递任何参数。

宁静的API

因此,只需单击“尝试一下”按钮,您就会在响应中看到一个员工列表。

宁静的API

获取员工

接下来,我们将使用GET操作根据输入的employeeId仅检索一名雇员。 我们将把employeeId传递给其余端点/ api / employees / {employeeId}。

宁静的API

单击getEmployee并将employeeId填充为1,这意味着我们要检索employeeId为1的雇员。

宁静的API

单击尝试按钮,您将在响应中看到具有employeeId 1的雇员的数据,如下所示:

宁静的API

更新员工-/ api / employees / {employeeId}

接下来,我们将使用PUT操作和/ api / employees / {employeeId}端点来测试更新的员工休息端点。

宁静的API

单击updateEmployee链接。 粘贴employee json之一,并放入相应的employeeId,如下所示:

宁静的API

单击“试用”按钮,您将看到以下响应,响应代码为200(SUCCESS)。

宁静的API

验证雇员ID为1的员工在H2数据库的EMPLOYEE表中将薪水从1000更新为3000的更新记录。

宁静的API

删除员工–

接下来,我们将使用DELETE操作并使用/ api / employees / {employeeId}端点来测试delete Employee rest端点。

宁静的API

单击deteleEmployee链接并填写employeeId 1,这意味着我们要删除具有employeeId 1的雇员。

宁静的API

单击“试用”按钮,您将获得响应代码200,这表示请求已成功处理。

宁静的API

让我们通过打开H2控制台并查询数据库来验证是否已成功从数据库中删除了具有employeeId 1的雇员。

宁静的API

正如我们在上面看到的那样,我们在EMPLOYEE表中只有雇员id为2的雇员,因此雇员id为1的雇员已被成功删除。

摘要

因此,在以上文章中,我们看到了如何使用Spring Rest,Spring Data JPA和带有Spring Boot的H2数据库来创建Restful API。

我们要:

–使用必需的依赖项从spring Initializer创建Spring Boot项目。

–通过在POM.xml中添加其他依赖项并在spring boot应用程序类中添加批注来启用swagger支持。

–通过在application.properties中添加必要的属性来启用H2数据库。

–编写要使用的Rest Controller,服务,存储库和实体。

–启动Spring Boot应用程序,它将自动部署到嵌入式服务器。

–使用Swagger UI测试其余端点,并使用H2控制台验证H2数据库中的数据。

谢谢阅读。 与您认为有帮助的人分享。

翻译自: https://www.javacodegeeks.com/2018/08/restful-api-spring-rest-data-jpa-h2.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机IP地址pin,打印机的ip地址在机身上哪里,打印机的pin在哪看

打印机的ip地址在机身上哪里&#xff0c;打印机的pin在哪看时间&#xff1a;2021-04-19 10:38:04打印机是我们日常工作中必备的公办用品&#xff0c;但是对于刚接触打印机的电脑小白来说&#xff0c;打印机的网络设置可不简单&#xff0c;比如IP地址、pin码&#xff0c;他们可能…

开机启动失败_电脑常见开机引导错误的解决方法

电脑在开机启动过程中&#xff0c;经常会出现开机失败的故障&#xff0c;开机失败比较常出现在开机引导项错误的问题上&#xff0c;比如引导文件没了&#xff0c;硬盘有问题等等&#xff0c;有些小问题重启几遍可以解决&#xff0c;有些问题就只能修复。这边小编跟大家整理分享…

2020非全日计算机博士,在职攻读博士是不是非常难,免考在职博士和非全日博士有什么不同...

博士的含金量我们自然不容忽视&#xff0c;但博士又不是说三天打鱼两天晒网就可搞定的&#xff0c;都是要经过长久的沉淀以及耐心才能坚持下来的&#xff0c;博士少说也要读个四到五年方可毕业&#xff0c;但也有个别优秀的三年内就完成学业待着自己的成功找到了丰厚的薪资待遇…

创建二级索引_Mysql创建索引

零:文章概要这篇文章&#xff0c;主要是和大家一起去了解 索引&#xff0c;然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。一&#xff1a;先拿电话薄做个类比假如&#xff0c;一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么&#xff0c;想找到Bob Ca…

转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测

作为上班族&#xff0c;日常开会加出差&#xff0c;经常需要用到笔记本连接投影仪投屏。很多小伙伴为了高效办公&#xff0c;使用的都是性能强劲但是设计轻薄的笔记本产品&#xff0c;最常见的就是苹果笔记本。但是比较尴尬的是&#xff0c;目前可以使用的绝大部分苹果笔记本电…

使用Java流查询数据库

在本文中&#xff0c;您将学习如何编写纯Java应用程序&#xff0c;这些应用程序能够处理现有数据库中的数据&#xff0c;而无需编写单行SQL&#xff08;或类似的语言&#xff0c;例如HQL&#xff09;&#xff0c;也无需花费数小时将所有内容放在一起。 准备好应用程序之后&…

2017计算机信息技术,2017年一级计算机信息技术及应用考试试题级答案[权威资料]...

2017年一级计算机信息技术及应用考试试题级答案 本文档格式为WORD,感谢你的阅读。最新最全的 学术论文 期刊文献 年终总结 年终报告 工作总结 个人总结 述职报告 实习报告 单位总结 演讲稿2017年一级计算机信息技术及应用考试试题级答案一、基础知识题(共45分&#xff0c;每题1…

恐鬼症不显示服务器区域,恐鬼症 steam版【简体中文】【4.34GB】

游戏介绍《恐鬼症(Phasmophobia)》是一款玩法十分精彩的冒险解谜类游戏&#xff0c;这款游戏支持4人联机对战&#xff0c;共同寻找隐藏的秘密&#xff0c;游戏的过程比较惊悚&#xff0c;需要玩家拥有强大的心里承受能力&#xff0c;气氛和渲染都十分的优质&#xff0c;游戏由K…

ajax默认什么方法,ajax设置默认值ajaxSetup()方法

$(function(){//设置全局 jQuery Ajax全局参数$.ajaxSetup({type:"POST",async:false,cache:false,dataType:"JSON",error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case(500):alert(服务器系统内部错误);break;case(401):alert(未登…

android实现评论列表_【Android视图效果】分组列表实现吸顶效果

效果图效果图分析先来分析一下&#xff0c;可以看到这是一个按月份分组的2行图片列表&#xff0c;列表顶部一个悬浮栏&#xff0c;会随着列表滑动而刷新&#xff0c;点击顶部栏&#xff0c;弹出了一个筛选框。思路1.列表部分可以用RecyclerViewGridLayoutManager&#xff0c;月…

用ajax写无限循环,ajax无限循环

// 猜你喜欢的无限加载(function(){var content document.getElementsByClassName("content")[0];var footer document.getElementsByTagName("footer")[0];var winh window.innerHeight - footer.offsetHeight;var ul document.getElementById("…

lr监控虚拟服务器,lr监控服务器 教程

lr监控服务器 教程 内容精选换一换本教程旨在演示使用GDS(General Data Service)工具将远端服务器上的数据导入GaussDB(DWS)中的办法&#xff0c;帮助您学习如何通过GDS进行数据导入的方法。在本教程中&#xff0c;您将&#xff1a;生成本教程需要使用的CSV格式的数据源文件。将…

vc mysql 图片_VC连接MySQL

一、MySQL的安装可以考虑安装mysql-5.0.41-win32(可到http://www.newhua.com/soft/3573.htm处下载)&#xff0c;当然你有更新的版本更好&#xff0c;注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置&#xff0c;你可以设置你的服务器…

魔兽巨龙追猎者服务器微信群,魔兽世界:难怪现在“龙脊”价格低,掉落率提升,群里一天出几个...

祥子哥最近几天一直在练猎人号&#xff0c;目前已经67级了&#xff0c;再过两三天差不多就能满级了。知道祥子哥为什么练猎人吗&#xff1f;不全是因为猎人伤害高玩着爽&#xff0c;还有另一个原因&#xff0c;那就是“龙脊奖章”现在价格很便宜&#xff0c;祥子哥使把劲应该能…

mysql group原理_MySQL Group By 实现原理分析

【IT168 专稿】由于 GROUP BY 实际上也同样会进行排序操作&#xff0c;而且与 ORDER BY 相比&#xff0c;GROUP BY 主要只是多了排序之后的分组操作。当然&#xff0c;如果在分组的时候还使用了其他的一些聚合函数&#xff0c;那么还需要一些聚合函数的计算。所以&#xff0c;在…

使用AWS Lambda的CloudWatch事件通知

CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前&#xff0c;它支持在Auto Scaling组&#xff0c;EC2&#xff0c;EBS和其他各种事件中发出的事件。 为了对这些事件进行有意义的处理&#xff0c;我们需要一种消耗它们的方法。 AWS使用术语“ targets来指代任何…

r语言 中断r的输入_R语言_004数据输入

现实的情况是&#xff0c;我们大部分遇到的都是表格数据&#xff0c;在R语言里面叫数据框&#xff0c;数据来源一般不可能我们自己在程序开始前手动录入&#xff0c;正常的逻辑是从外面读取现成的数据&#xff0c;再预处理、建模什么的。根据经验&#xff0c;现在的数据来源主要…

我的机器人现在无处可去。 无家可归。 无服务器。

我通常会关注各种网站-有关最新出版物&#xff0c;热门新优惠&#xff0c;限时游戏和竞赛等。 其中大多数不提供“干净”的通知系统&#xff0c;例如RSS feed。 因此&#xff0c;我经常不得不刮擦他们HTML才能达到我所需要的。 这意味着我经常需要运行一些自定义的字符串操作…

dubbo 消费者也要暴露端口吗_一文详细解读 Dubbo 中的 http 协议

(给ImportNew加星标&#xff0c;提高Java技能)转自&#xff1a;Kirito的技术分享&#xff0c;作者&#xff1a;kiritomoe太阳红彤彤&#xff0c;花儿五颜六色&#xff0c;各位读者朋友好&#xff0c;又来到了分享 Dubbo 知识点的时候了。说到 Dubbo 框架支持的协议&#xff0c;…

非一致性访存系统_Hibernate事实:访存策略的重要性

非一致性访存系统在使用ORM工具时&#xff0c;每个人都承认数据库设计和实体到表映射的重要性。 这些方面引起了很多关注&#xff0c;而诸如获取策略之类的事情可能只是推迟了。 我认为&#xff0c;不应将实体获取策略与实体映射设计分开&#xff0c;因为除非经过适当设计&…