React.js 与 Spring Data REST:第一部分 - 基本功能
| 要查看此代码的更新,请访问我们的 React.js 与 Spring Data REST 教程。 |
Spring 社区的各位,欢迎!
这是几篇博客文章的第一篇。在本期中,您将看到如何快速启动并运行一个最基本的 Spring Data REST 应用程序。然后,您将使用 Facebook 的 React.js 工具集在其之上构建一个简单的 UI。
第 0 步 - 设置您的环境
您可以随时从该存储库 获取代码 并进行学习。
如果您想自己动手,请访问 http://start.spring.io 并选择以下选项
- Rest Repositories
- Thymeleaf
- JPA
- H2
此演示使用 Java 8、Maven 项目和最新稳定的 Spring Boot 版本。这将为您提供一个干净的空白项目。之后,您可以添加本期中明确显示到的各种文件,和/或从上面列出的存储库中借用。
起初……
起初,有数据。一切都很好。但随后人们希望通过各种方式访问数据。多年来,人们拼凑了许多 MVC 控制器,其中许多使用了 Spring 强大的 REST 支持。但一遍又一遍地重复会耗费大量时间。
Spring Data REST 解决了在做了一些假设的情况下,这个问题可以变得多么简单
- 开发人员使用支持存储库模型的 Spring Data 项目。
- 系统使用公认的、行业标准的协议,如 HTTP 动词、标准化的媒体类型和 IANA 批准的链接名称。
声明您的域
任何基于 Spring Data REST 的应用程序的基石都是域对象。在本期中,您将构建一个应用程序来跟踪公司的员工。通过创建一个如下的数据类型来启动这个过程
@Data @Entity public class Employee {private @Id @GeneratedValue Long id; private String firstName; private String lastName; private String description; private Employee() {} public Employee(String firstName, String lastName, String description) { this.firstName = firstName; this.lastName = lastName; this.description = description; }
}
-
@Entity是一个 JPA 注解,它表示整个类将存储在关系表中。 -
@Id和@GeneratedValue是 JPA 注解,用于表示主键,并在需要时自动生成。 -
@Data和@RequiredArgsConstructor是 Project Lombok 注解,用于自动生成 getter、setter、构造函数、toString、hash、equals 等。它减少了样板代码。
此实体用于跟踪员工信息。在这种情况下,是他们的姓名和工作描述。
|
注意
|
Spring Data REST 不限于 JPA。它支持许多 NoSQL 数据存储,但在这里我们不会介绍它们。 |
定义存储库
Spring Data REST 应用程序的另一个关键部分是创建相应的存储库定义。
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
}
- 存储库扩展了 Spring Data Commons 的
CrudRepository,并注入了域对象的类型及其主键。
仅此而已!事实上,如果它是顶级的且可见的,您甚至不必注解它。如果您使用 IDE 并打开 CrudRepository,您会发现其中已经定义了大量预构建的方法。
|
注意
|
您可以根据需要 定义自己的存储库。Spring Data REST 也支持这一点。 |
预加载演示
要使用此应用程序,您需要预先加载一些数据,如下所示
@Component
public class DatabaseLoader implements CommandLineRunner {
private final EmployeeRepository repository;
@Autowired
public DatabaseLoader(EmployeeRepository repository) {
this.repository = repository;
}
@Override
public void run(String... strings) throws Exception {
this.repository.save(new Employee("Frodo", "Baggins…
