使用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 {
 
 @Autowired
 private 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{

 @Autowired
 private 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值