SpringBoot 增删改查

什么是CRUD操作?

CRUD 代表 创建,读取/检索,更新删除。这些是持久性存储的四个基本功能。

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

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

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

标准CRUD操作

创建操作: 它执行INSERT语句以创建新记录。 读取操作: 它根据输入参数读取表记录。 更新操作: 它在表上执行一条update语句。它基于输入参数。 删除操作: 它将删除表中的指定行。它也基于输入参数。

CRUD操作的工作原理

CRUD操作是最动态的网站的基础。因此,我们应该将 CRUD HTTP 动作动词区分开来。

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

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

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

操作SQL HTTP动词RESTful Web服务
Create INSERT PUT/POST POST
Read SELECTGETGET
Update UPDATE PUT/POST/PATCH PUT
Delete DeleteDeleteDelete

Spring Boot CrudRepository

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

语法

public interface CrudRepository<T,ID> extends Repository<T,ID>

其中

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

例如:

public interface StudentRepository extends CrudRepository<Student, Integer>
{
}

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

Spring引导JpaRepository

JpaRepository提供了与JPA相关的方法,例如刷新,持久性上下文,并批量删除了一条记录。它在包 org.springframework.data.jpa.repository中定义。 JpaRepository扩展了 CrudRepository PagingAndSortingRepository。

例如:

public interface BookDAO extends JpaRepository 
{
}


Spring Boot CRUD操作

为什么要使用这些接口?

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

CrudRepository与JpaRepository

CrudRepository JpaRepository
CrudRepository没有提供任何用于分页和排序的方法。JpaRepository扩展了PagingAndSortingRepository。它提供了实现分页的所有方法。
它用作标记界面。JpaRepository扩展了 CrudRepository PagingAndSortingRepository
它仅提供CRUD功能。例如 findById(),findAll()等。它提供了一些额外的方法以及PagingAndSortingRepository和CrudRepository的方法。例如, flush(),deleteInBatch()。
在不需要JpaRepository和PagingAndSortingRepository提供的功能时使用。当我们要在应用程序中实现分页和排序功能时使用。

Spring Boot CRUD操作示例

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

步骤1: 打开Spring Initializr http://start.spring.io 。

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

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

步骤3: 提供 Artifact ID。我们提供了 spring-boot-crud-operation。

步骤5: 添加依赖项 Spring Web,Spring Data JPA, H2数据库。

步骤6: 单击 Generate (生成)按钮。当我们单击"生成"按钮时,它将规格包装在 Jar 文件中,并将其下载到本地系统。

Spring Boot CRUD操作

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

步骤8: 将项目文件夹导入STS。

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-crud-operation->完成

导入需要一些时间。

步骤9: 在目录中创建名称为 com.nhooo.model 的程序包。文件夹 src/main/java。

步骤10: 在包 com.nhooo.model中创建类。 我们创建了一个名为 Books的类。 在"图书"类中,我们执行了以下操作:

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

Books.java

package com.nhooo.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//mark class as an Entity 
@Entity
//defining class name as Table name
@Table
public class Books
{
//Defining book id as primary key
@Id
@Column
private int bookid;
@Column
private String bookname;
@Column
private String author;
@Column
private int price;
public int getBookid() 
{
return bookid;
}
public void setBookid(int bookid) 
{
this.bookid = bookid;
}
public String getBookname()
{
return bookname;
}
public void setBookname(String bookname) 
{
this.bookname = bookname;
}
public String getAuthor() 
{
return author;
}
public void setAuthor(String author) 
{
this.author = author;
}
public int getPrice() 
{
return price;
}
public void setPrice(int price) 
{
this.price = price;
}
}

步骤11: src/main/java文件夹中创建一个名称为 com.nhooo.controller 的包。

步骤12: 在包 com.nhooo.controller中创建一个Controller类。 我们创建了一个名为 BooksController的控制器类。 在BooksController类中,我们完成了以下操作:

使用注解 @RestController将类标记为 RestController 使用注解 @Autowired 自动注解 BooksService 类。 定义以下方法: getAllBooks(): 。它返回所有书籍的列表。 getBooks(): 它返回我们在path变量中指定的书籍详细信息。通过使用注解@PathVariable,我们已将bookid作为参数传递。注解指示方法参数应绑定到URI模板变量。 deleteeBook(): 它将删除我们在path变量中指定的特定书籍。 saveBook(): 保存图书详细信息。注解@RequestBody表示应将方法参数绑定到Web请求的正文。 update(): 该方法更新一条记录。我们必须在正文中指定要更新的记录吃了为了达到相同的目的,我们使用了@RequestBody注解。

BooksController.java

package com.nhooo.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 com.nhooo.model.Books;
import com.nhooo.service.BooksService;
//将类标记为 Controller
@RestController
public class BooksController 
{
    //自动装配BooksService类
    @Autowired
    BooksService booksService;
    //创建从数据库检索所有图书详细信息的get映射
    @GetMapping("/book")
    private List<Books> getAllBooks() 
    {
    return booksService.getAllBooks();
    }
    //创建检索特定书籍详细信息的get映射
    @GetMapping("/book/{bookid}")
    private Books getBooks(@PathVariable("bookid") int bookid) 
    {
    return booksService.getBooksById(bookid);
    }
    //创建删除映射,删除指定的书
    @DeleteMapping("/book/{bookid}")
    private void deleteBook(@PathVariable("bookid") int bookid) 
    {
    booksService.delete(bookid);
    }
    //创建在数据库中发布书籍详细信息的post映射
    @PostMapping("/books")
    private int saveBook(@RequestBody Books books) 
    {
    booksService.saveOrUpdate(books);
    return books.getBookid();
    }
    //创建更新图书详细信息的put映射
    @PutMapping("/books")
    private Books update(@RequestBody Books books) 
    {
    booksService.saveOrUpdate(books);
    return books;
    }
}

步骤13: 在文件夹 src/main/java中创建一个名称为 com.nhooo.service 的包。

步骤14: 创建一个 Service 类。我们在包 com.nhooo.service中创建了一个名为 BooksService 的服务类。

BooksService.java

package com.nhooo.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.nhooo.model.Books;
import com.nhooo.repository.BooksRepository;
//定义业务逻辑
@Service
public class BooksService 
{
    @Autowired
    BooksRepository booksRepository;
    //使用 cruddrepository 的 findaAll ()方法获取所有书籍记录
    public List<Books> getAllBooks() 
    {
    List<Books> books = new ArrayList<Books>();
    booksRepository.findAll().forEach(books1 -> books.add(books1));
    return books;
    }
    //通过使用 cruddrepository 的 findById ()方法获取特定的记录
    public Books getBooksById(int id) 
    {
    return booksRepository.findById(id).get();
    }
    //使用CrudRepository的save()方法保存特定记录
    public void saveOrUpdate(Books books) 
    {
    booksRepository.save(books);
    }
    //使用CrudRepository的deleteById()方法删除特定记录
    public void delete(int id) 
    {
    booksRepository.deleteById(id);
    }
    //更新记录
    public void update(Books books, int bookid) 
    {
    booksRepository.save(books);
    }
}

步骤15: 在文件夹 src/main/java中创建一个名称为 com.nhooo.repository 的包。

第16步: 创建一个 存储库界面。我们在包 com.nhooo.repository中创建了一个名为 BooksRepository 的存储库接口。 它扩展了 Crud存储库界面。

BooksRepository.java

package com.nhooo.repository;
import org.springframework.data.repository.CrudRepository;
import com.nhooo.model.Books;
//repository that extends CrudRepository
public interface BooksRepository extends CrudRepository<Books, Integer>
{
}

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

步骤17: 打开 application.properties 文件并配置以下属性。

application.properties

spring.datasource.url=jdbc:h2:mem:books_data
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect#enabling the H2 consolespring.h2.console.enabled=true
注意: 不要忘记启用H2控制台。

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

Spring Boot CRUD操作

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

步骤18: 打开 SpringBootCrudOperationApplication.java 文件并作为Java应用程序运行。

SpringBootCrudOperationApplication.java

package com.nhooo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootCrudOperationApplication 
{
public static void main(String[] args) 
{
SpringApplication.run(SpringBootCrudOperationApplication.class, args);
}
}
注意: 在接下来的步骤中,我们将使用rest client Postman。因此,请确保您的系统中已经安装了Postman应用程序。

步骤19: 打开 Postman并执行以下操作:

选择 POST 调用URL http://localhost:8080/books。 选择Body 选择内容类型 JSON(application/json)。 插入数据。我们已在主体中插入以下数据:

{
    "bookid": "5433",
    "bookname": "Core and Advance Java",
    "author": "R. Nageswara Rao",
    "price": "800"
}

点击发送

请求成功执行后,它会显示 状态: 200 OK 。这意味着记录已成功插入数据库中。

类似地,我们插入了以下数据。

{"bookid": "0982","bookname": "Programming with Java","author": "E. Balagurusamy","price": "350"
} 
{
    "bookid": "6321",
    "bookname": "Data Structures and Algorithms in Java",
    "author": "Robert Lafore",
    "price": "590"
} 
{
    "bookid": "5433",
    "bookname": "Effective Java",
    "author": "Joshua Bloch",
    "price": "670"
}

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

步骤20: 打开浏览器并调用URL http://localhost:8080/h2-console。单击 Connect 按钮,如下所示。

Spring Boot CRUD操作

单击 连接按钮后,我们将在数据库中看到 Books 表,如下所示。

Spring Boot CRUD操作

步骤21: 单击 Books 表,然后然后点击 运行按钮。该表显示了我们插入到正文中的数据。

Spring Boot CRUD操作

步骤22: 打开 Postman,并发送URL为http://localhost:8080/books的 GET 请求。它返回我们插入数据库中的数据。

Spring Boot CRUD操作

我们以URL http://localhost:8080/book/{bookid}发送 GET 请求。我们指定了 bookid 6830 。它返回ID为6830的书的详细信息。

Spring Boot CRUD操作

同样,我们也可以发送 DELETE 请求删除记录。假设我们要删除ID为 5433 的图书记录。

选择 DELETE 方法并调用URL http://localhost:8080/书/5433。再次在H2控制台中执行 Select 查询。我们发现ID为 5433 的图书已从数据库中删除。

Spring Boot CRUD操作

类似地,我们也可以通过发送 PUT 请求来更新记录。让我们更新ID为 6321 的图书的价格。

选择 PUT 在请求正文中,粘贴要更新的记录并进行更改。在本示例中,我们要更新ID为6321的书籍的记录。在以下记录中,我们更改了书籍的价格。

{
    "bookid": "6321",
    "bookname": "Data Structures and Algorithms in Java",
    "author": "Robert Lafore",
    "price": "500"
}

点击发送

现在,移至H2控制台,查看更改是否已反映。我们看到这本书的价格已更改,如下所示。

Spring Boot CRUD操作

下载CRUD操作项目