使用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;但也有个别优秀的三年内就完成学业待着自己的成功找到了丰厚的薪资待遇…

cru使用教程_教程|Crust 测试网 Maxwell 1.0 用户指南

“Crust 实现了去中心化存储的激励层协议&#xff0c;适配包括 IPFS 在内的多种存储层协议&#xff0c;并对应用层提供支持。同时 Crust 的架构也有能力对去中心化计算层提供支持&#xff0c;构建分布式云生态。”Crust Network 首个公开测试网——Maxwell 1.0 版本正式上线&am…

分数乘法计算机题,《分数乘法》测试题

第1篇&#xff1a;《分数乘法》测试题一、填空&#xff1a;1、3/103/103/10()/()()/()7/207/207/207/20()/()()/()2、选择“&#xff1e;、&#xff1c;或&#xff1d;”。1/410&#xff1e;&#xff1c;1/43/51&#xff1e;&#xff1c;3/57/120&#xff1e;&#xff1c;7/127…

Hibernate事实:有利于双向集vs列表

Hibernate是一个很棒的ORM工具&#xff0c;它极大地简化了开发&#xff0c;但是如果您想正确地使用它&#xff0c;则有很多陷阱。 在大中型项目中&#xff0c;双向父子关联非常常见&#xff0c;这使我们能够浏览给定关系的两端。 在控制关联的持久/合并部分时&#xff0c;有两…

创建二级索引_Mysql创建索引

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

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

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

计算机专业教学工作小结,计算机专业教学的工作总结

本人在教育教学上&#xff0c;爱岗敬业&#xff0c;严谨治教&#xff0c;热爱学生&#xff0c;努力做到把学生教好&#xff0c;让学生成功成才&#xff0c;优秀教师应有的职责。因此我在教育教学方面注意了以下几个问题&#xff0c;现作工作总结如下&#xff1a;一、思想方面本…

使用Java流查询数据库

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

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

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

sigquit信号默认忽略吗_linux下的信号列表

我们运行如下命令&#xff0c;可看到Linux支持的信号列表&#xff1a;$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGC…

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

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

进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程

进程比线程更多资源总览 有一个普遍的论点&#xff0c;因为我们有很多核心&#xff0c;并且将来还会有更多核心&#xff0c;所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法&#xff0c;而仅仅是因为我们不能意味着我们应该这样做。 我们的目标是什么&#xff1f;…

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(未登…

Java谓词的延迟执行

在先前的文章“ 用Java的供应商延迟执行 ”和“ Java的消费者延迟执行 “&#xff0c;我看着很容易地通过推迟标准Java API接受&#xff0c;分别在Java执行供应商 S和消费者秒。 在本文中&#xff0c;我将对标准JDK提供的API如何通过标准功能接口Predicate允许延迟执行进行类似…

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("…

JDK 11:发行候选更新和OpenJDK JDK 11 LTS

JDK 11是预定被释放的一般可用性上周二&#xff0c;9月25日2018年2018年8月16日马克莱因霍尔德消息上OpenJDK的JDK-dev邮件列表宣布“ JDK 11现在在候选发布版阶段 。” 但是&#xff0c;Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详细信息&#xff0c;他在…

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

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