你好朋友,
在本教程中,您将学习以下内容:
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 {@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/
它将显示以下屏幕:
单击“连接”按钮,它将把您连接到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