你好朋友,
在本教程中,您将学习以下内容:
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
注意:如果您不熟悉使用Spring Initializer创建Spring Boot项目,我建议您参考我以前的一篇文章, 如何使用Spring Initializer创建Spring Boot项目 ,我在上面详细解释了如何创建Spring Boot项目。使用Spring Initializer。
2.使用Spring Boot创建Springful服务端点的Spring Rest,Spring Data JPA和H2的示例
在此示例中,我们将创建Rest端点以:
–创建员工资源
–检索员工名单
–检索员工
–更新员工资源
–删除员工资源
以下是项目的最终目录结构:
让我们看看我们需要创建的各种类和接口。
步骤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/
它将显示以下屏幕:
单击“连接”按钮,它将把您连接到H2数据库。 并且您可以看到EMPLOYEE表已创建,但是该表中没有数据,这与我们预期的一样。
3.使用Swagger测试Restful端点
要测试您的其余端点,请点击以下Swagger URL:
http://localhost:8080/swagger-ui.html
它将打开以下页面
单击“ employee-rest-controller”链接。 它将向您显示此控制器支持的操作,如下所示:
现在,我们可以在上面的屏幕快照中看到五个端点。 我们将一一测试。
挽救员工– / api / employees
我们要做的第一件事是在数据库中创建资源,为此我们将使用POST操作并使用/ api / employees端点。
单击saveEmployee并填写我们创建资源所需的所有必需数据,然后单击“试用”按钮。
这就是您的请求和响应的样子
如您所见,响应代码为200,表示成功,因此我们的记录应该已经在H2数据库中创建了。
让我们检查一下。
打开H2 Web控制台并查询EMPLOYEE表,您可以看到我们从Swagger UI推送的记录。
同样,从Swagger UI中再插入一名雇员,并输入以下数据:
再次查询数据库,您将在数据库中看到两条记录,如下所示:
获取员工-/ api /员工
现在,由于我们已经在数据库中插入了两个记录,我们将尝试在GET操作的帮助下并使用/ api / employees端点来检索这些记录,如下所示:
单击getEmployees,然后由于我们要检索所有雇员的列表,因此无需传递任何参数。
因此,只需单击“尝试一下”按钮,您就会在响应中看到一个员工列表。
获取员工
接下来,我们将使用GET操作根据输入的employeeId仅检索一名雇员。 我们将把employeeId传递给其余端点/ api / employees / {employeeId}。
单击getEmployee并将employeeId填充为1,这意味着我们要检索employeeId为1的雇员。
单击尝试按钮,您将在响应中看到具有employeeId 1的雇员的数据,如下所示:
更新员工-/ api / employees / {employeeId}
接下来,我们将使用PUT操作和/ api / employees / {employeeId}端点来测试更新的员工休息端点。
单击updateEmployee链接。 粘贴employee json之一,并放入相应的employeeId,如下所示:
单击“试用”按钮,您将看到以下响应,响应代码为200(SUCCESS)。
验证雇员ID为1的员工在H2数据库的EMPLOYEE表中将薪水从1000更新为3000的更新记录。
删除员工–
接下来,我们将使用DELETE操作并使用/ api / employees / {employeeId}端点来测试delete Employee rest端点。
单击deteleEmployee链接并填写employeeId 1,这意味着我们要删除具有employeeId 1的雇员。
单击“试用”按钮,您将获得响应代码200,这表示请求已成功处理。
让我们通过打开H2控制台并查询数据库来验证是否已成功从数据库中删除了具有employeeId 1的雇员。
正如我们在上面看到的那样,我们在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