Spring Boot CRUD 操作

2025年3月18日 | 阅读 10 分钟

什么是 CRUD 操作?

CRUD 代表 创建 (Create)、读取/检索 (Read/Retrieve)、更新 (Update)删除 (Delete)。这些是持久化存储的四个基本功能。

CRUD 操作可以定义为允许用户通过基于计算机的表单和报告来查看、搜索和修改信息的 UI 约定。CRUD 是面向数据的,并且是 HTTP 动词 的标准化用法。HTTP 有几个重要的动词。

  • POST: 创建一个新资源
  • GET: 读取一个资源
  • PUT: 更新一个现有资源
  • DELETE: 删除一个资源

在数据库中,这些操作中的每一个都直接映射到一系列命令。然而,它们与 RESTful API 的关系要复杂一些。

标准 CRUD 操作

  • 创建 (CREATE) 操作: 执行 INSERT 语句来创建新记录。
  • 读取 (READ) 操作: 根据输入参数读取表记录。
  • 更新 (UPDATE) 操作: 在表上执行 UPDATE 语句。它基于输入参数。
  • 删除 (DELETE) 操作: 删除表中指定的行。它也基于输入参数。

CRUD 操作如何工作

CRUD 操作是大多数动态网站的基础。因此,我们应该区分 CRUDHTTP 动词

假设我们要创建一条新记录,应该使用 HTTP 动词 POST。要更新一条记录,应该使用 PUT 动词。同样,如果我们想删除一条记录,应该使用 DELETE 动词。通过 CRUD 操作,用户和管理员可以在线检索、创建、编辑和删除记录。

我们有很多执行 CRUD 操作的选择。其中一种最高效的选择是在 SQL 中创建一组存储过程来执行操作。

CRUD 操作指的是在关系数据库应用程序中实现的所有主要功能。CRUD 的每个字母都可以映射到 SQL 语句和 HTTP 方法。

操作SQLHTTP 动词RESTful Web 服务
创建INSERTPUT/POSTPOST
读取SELECTGETGET
更新UPDATEPUT/POST/PATCHPUT
删除DELETEDELETEDELETE

Spring Boot CrudRepository

Spring Boot 提供了一个名为 CrudRepository 的接口,其中包含 CRUD 操作的方法。它定义在 org.springframework.data.repository 包中。它扩展了 Spring Data 的 Repository 接口。它在存储库上提供通用的 CRUD 操作。如果我们想在应用程序中使用 CrudRepository,我们需要创建一个接口并扩展 CrudRepository

语法

其中,

  • T 是存储库管理的域类型。
  • ID 是存储库管理的实体的 ID 类型。

例如

在上面的示例中,我们创建了一个名为 StudentRepository 的接口,它扩展了 CrudRepository。其中 Student 是要管理的存储库,Integer 是在 Student 存储库中定义的 ID 类型。

Spring Boot JpaRepository

JpaRepository 提供 JPA 相关的​​方法,例如刷新、持久化上下文和批量删除记录。它定义在 org.springframework.data.jpa.repository. 包中。JpaRepository 同时扩展了 CrudRepositoryPagingAndSortingRepository

例如


Spring Boot CRUD Operations

为什么我们应该使用这些接口?

  • 这些接口允许 Spring 找到存储库接口并为其创建代理对象。
  • 它提供了允许我们执行一些常见操作的方法。我们也可以定义自定义方法。

CrudRepository 与 JpaRepository

CrudRepositoryJpaRepository
CrudRepository 不提供任何分页和排序方法。JpaRepository 扩展了 PagingAndSortingRepository。它提供了实现分页的所有方法。
它用作一个标记接口。JpaRepository 同时扩展了 CrudRepositoryPagingAndSortingRepository
它仅提供 CRUD 功能。例如 findById(), findAll() 等。除了 PagingAndSortingRepository 和 CrudRepository 的方法外,它还提供了一些额外的方法。例如 flush(), deleteInBatch()
当我们不需要 JpaRepository 和 PagingAndSortingRepository 提供的功能时使用它。当我们想在应用程序中实现分页和排序功能时使用它。

Spring Boot CRUD 操作示例

让我们设置一个 Spring Boot 应用程序并执行 CRUD 操作。

第一步: 打开 Spring Initializr http://start.spring.io

步骤 2: 选择 Spring Boot 版本 2.3.0.M1。

步骤 2:提供Group 名称。我们提供了 com.javatpoint。

第三步: 提供 Artifact ID。我们提供了 spring-boot-crud-operation

第五步: 添加依赖项 Spring Web, Spring Data JPA,H2 Database

步骤 6: 单击 Generate 按钮。当我们单击 Generate 按钮时,它将规范包装在一个 Jar 文件中,并将其下载到本地系统。

Spring Boot CRUD Operations

步骤 7:解压 Jar 文件并将其粘贴到 STS 工作区中。

第八步: 将项目文件夹导入 STS。

File -> Import -> Existing Maven Projects -> Browse -> Select the folder spring-boot-crud-operation -> Finish

它需要一些时间来导入。

第九步:src/main/java 文件夹中创建一个名为 com.javatpoint.model 的包。

第十步:com.javatpoint.model 包中创建一个模型类。我们创建了一个名为 Books 的模型类。在 Books 类中,我们做了以下操作:

  • 定义四个变量 bookid, bookname, author,
  • 生成 Getters 和 Setters。
    右键单击文件 -> Source -> Generate Getters and Setters。
  • 使用 @Entity 注解将类标记为 Entity
  • 使用 @Table 注解将类标记为名。
  • 使用 @Column 注解将每个变量定义为

Books.java

第十一步:src/main/java 文件夹中创建一个名为 com.javatpoint.controller 的包。

第十二步:com.javatpoint.controller 包中创建一个 Controller 类。我们创建了一个名为 BooksController 的 Controller 类。在 BooksController 类中,我们做了以下操作:

  • 使用 @RestController 注解将类标记为 RestController
  • 使用 @Autowired 注解自动注入 BooksService 类。
  • 定义以下方法:
    • getAllBooks(): 返回所有 Books 的列表。
    • getBooks(): 返回我们通过路径变量指定的 Book。我们通过使用 @PathVariable 注解将 bookid 作为参数传递。该注解表示方法参数应绑定到 URI 模板变量。
    • deleteBook(): 删除我们通过路径变量指定的特定 Book。
    • saveBook(): 保存 Book 的详细信息。@RequestBody 注解表示方法参数应绑定到 Web 请求的请求体。
    • update(): 更新一条记录。我们必须在请求体中指定要更新的记录。为了实现这一点,我们使用了 @RequestBody 注解。

BooksController.java

第十三步:src/main/java 文件夹中创建一个名为 com.javatpoint.service 的包。

第十四步: 创建一个服务类。我们在 com.javatpoint.service 包中创建了一个名为 BooksService 的服务类。

BooksService.java

第十五步:src/main/java 文件夹中创建一个名为 com.javatpoint.repository 的包。

第十六步: 创建一个存储库接口。我们在 com.javatpoint.repository 包中创建了一个名为 BooksRepository 的存储库接口。它扩展了 Crud Repository 接口。

BooksRepository.java

现在我们将在 application.properties 文件中配置数据源 URL, 数据库驱动程序类名, 用户名,密码

第十七步: 打开 application.properties 文件并配置以下属性。

application.properties

注意:不要忘记启用 H2 控制台。

创建完所有类和包后,项目目录如下所示。

Spring Boot CRUD Operations

现在我们将运行应用程序。

第十八步: 打开 SpringBootCrudOperationApplication.java 文件并将其作为 Java 应用程序运行。

SpringBootCrudOperationApplication.java

注意:在接下来的步骤中,我们将使用 Postman REST 客户端。因此,请确保您的系统中已安装 Postman 应用程序。

第十九步: 打开 Postman 并执行以下操作:

  • 选择 POST
  • 调用 URL https://:8080/books。
  • 选择 Body
  • 选择 Content-Type JSON (application/json)
  • 插入数据。我们在 Body 中插入了以下数据:
  • 点击 Send

当请求成功执行时,它会显示 Status:200 OK。这意味着记录已成功插入数据库。

同样,我们也插入了以下数据。

让我们访问 H2 控制台查看数据。

第二十步: 打开浏览器并调用 URL https://:8080/h2-console。点击 Connect 按钮,如下图所示。

Spring Boot CRUD Operations

点击 Connect 按钮后,我们在数据库中看到 Books 表,如下图所示。

Spring Boot CRUD Operations

第二十一步: 点击 Books 表,然后点击 Run 按钮。该表显示了我们在 Body 中插入的数据。

Spring Boot CRUD Operations

第二十二步: 打开 Postman 并发送一个 GET 请求,URL 为 https://:8080/books。它返回我们插入到数据库中的数据。

Spring Boot CRUD Operations

让我们发送一个 GET 请求,URL 为 https://:8080/book/{bookid}。我们指定了 bookid 6830。它返回 ID 为 6830 的 Book 的详细信息。

Spring Boot CRUD Operations

同样,我们也可以发送一个 DELETE 请求来删除一条记录。假设我们要删除 ID 为 5433 的 Book 记录。

选择 DELETE 方法并调用 URL https://:8080/book/5433。再次在 H2 控制台中执行 Select 查询。我们看到 ID 为 5433 的 Book 已从数据库中删除。

Spring Boot CRUD Operations

同样,我们也可以通过发送 PUT 请求来更新一条记录。让我们更新 ID 为 6321 的 Book 的价格。

  • 选择 PUT
  • 在请求体中,粘贴您想要更新的记录并进行更改。在我们的例子中,我们想更新 ID 为 6321 的 Book 的记录。在以下记录中,我们更改了 Book 的价格。
  • 点击 Send

现在,转到 H2 控制台并查看更改是否已反映。我们看到 Book 的价格已更改,如下图所示。

Spring Boot CRUD Operations

Spring Boot CRUD 操作选择题

1. 哪个 Spring Boot 注解用于创建处理 CRUD 操作的 RESTful Web 服务?

  1. @Service
  2. @Repository
  3. @Controller
  4. @RestController
 

答案:D

解释: @RestController 注解在 Spring Boot 中用于创建 RESTful Web 服务。它结合了 @Controller 和 @ResponseBody,允许类处理 HTTP 请求并直接从方法返回响应。


2. @RequestMapping 注解在 Spring Boot CRUD 操作中的作用是什么?

  1. 注入依赖项。
  2. 将 HTTP 请求映射到 MVC 和 REST 控制器的处理程序方法。
  3. 管理事务。
  4. 配置数据源属性。
 

答案:B

解释: @RequestMapping 注解用于将 HTTP 请求映射到 MVC 和 REST 控制器中的特定处理程序方法。它可以在类级别和方法级别使用,以定义请求 URL 和 HTTP 方法。


3. 以下哪个不是 Spring Boot CRUD 操作中使用的有效 HTTP 方法?

  1. GET
  2. POST
  3. DELETE
  4. CONNECT
 

答案:D

解释: 在 Spring Boot CRUD 操作中,常用的 HTTP 方法是 GET(用于读取)、POST(用于创建)、PUT(用于更新)和 DELETE(用于删除)。CONNECT 方法用于建立网络连接,通常不用于 CRUD 操作。


4. 在 Spring Boot 中,哪个存储库方法用于通过其 ID 检索实体?

  1. findAll()
  2. findById()
  3. getOne()
  4. findByName()
 

答案:B

解释: Spring Data JPA 存储库中的 findById() 方法用于通过其主键(ID)检索实体。如果找到实体,它将返回一个包含该实体的 Optional,否则返回一个空的 Optional。


5. 使用 JPA 在 Spring Boot 应用程序中执行更新操作时,通常会使用哪个方法?

  1. save()
  2. update()
  3. merge()
  4. persist()
 

答案:A

解释: 在 Spring Data JPA 中,save() 方法用于创建新实体和更新现有实体。如果实体已存在(由 ID 确定),它将被更新;否则,将创建一个新实体。