📅  最后修改于: 2021-01-11 05:35:46             🧑  作者: Mango
CRUD代表创建,读取/检索,更新和删除。这些是持久性存储的四个基本功能。
可以将CRUD操作定义为用户界面约定,该约定允许通过基于计算机的表单和报告查看,搜索和修改信息。 CRUD是面向数据的,并且是HTTP操作动词的标准化使用。 HTTP有一些重要的动词。
在数据库中,每个操作都直接映射到一系列命令。但是,它们与RESTful API的关系稍微复杂一些。
CRUD操作是最具活力的网站的基础。因此,我们应该将CRUD与HTTP操作动词区分开。
假设,如果要创建新记录,则应使用HTTP操作动词POST 。要更新记录,我们应该使用PUT动词。同样,如果要删除记录,则应使用DELETE动词。通过CRUD操作,用户和管理员有权在线检索,创建,编辑和删除记录。
我们有许多执行CRUD操作的选项。最有效的选择之一是在SQL中创建一组存储过程来执行操作。
CRUD操作涉及在关系数据库应用程序中实现的所有主要功能。 CRUD的每个字母都可以映射到SQL语句和HTTP方法。
Operation | SQL | HTTP verbs | RESTful Web Service |
---|---|---|---|
Create | INSERT | PUT/POST | POST |
Read | SELECT | GET | GET |
Update | UPDATE | PUT/POST/PATCH | PUT |
Delete | DELETE | DELETE | DELETE |
Spring Boot提供了一个名为CrudRepository的接口,其中包含用于CRUD操作的方法。它在包org.springframework.data.repository中定义。它扩展了Spring Data Repository接口。它在存储库上提供通用的Crud操作。如果要在应用程序中使用CrudRepository,则必须创建一个接口并扩展CrudRepository 。
句法
public interface CrudRepository extends Repository
哪里,
例如:
public interface StudentRepository extends CrudRepository
{
}
在上面的示例中,我们创建了一个名为StudentRepository的接口,该接口扩展了CrudRepository。其中Student是要管理的存储库, Integer是Student存储库中定义的ID类型。
JpaRepository提供了与JPA相关的方法,例如刷新,持久性上下文,并批量删除了一条记录。它在包org.springframework.data.jpa.repository中定义。 JpaRepository扩展了CrudRepository和PagingAndSortingRepository。
例如:
public interface BookDAO extends JpaRepository
{
}
CrudRepository | JpaRepository |
---|---|
CrudRepository does not provide any method for pagination and sorting. | JpaRepository extends PagingAndSortingRepository. It provides all the methods for implementing the pagination. |
It works as a marker interface. | JpaRepository extends both CrudRepository and PagingAndSortingRepository. |
It provides CRUD function only. For example findById(), findAll(), etc. | It provides some extra methods along with the method of PagingAndSortingRepository and CrudRepository. For example, flush(), deleteInBatch(). |
It is used when we do not need the functions provided by JpaRepository and PagingAndSortingRepository. | It is used when we want to implement pagination and sorting functionality in an application. |
让我们设置一个Spring Boot应用程序并执行CRUD操作。
步骤1:打开Spring Initializr http://start.spring.io 。
步骤2:选择Spring Boot版本2.3.0.M1。
步骤2:提供群组名称。我们提供了com.javatpoint。
第3步:提供工件ID。我们提供了spring-boot-crud-operation。
步骤5:添加依赖项Spring Web,Spring Data JPA和H2数据库。
步骤6:点击Generate(生成)按钮。当我们单击Generate按钮时,它将规格包装在一个Jar文件中,并将其下载到本地系统。
步骤7:解压缩Jar文件并将其粘贴到STS工作区中。
步骤8:将项目文件夹导入STS。
文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-crud-operation->完成
导入需要一些时间。
步骤9:在src / main / java文件夹中创建一个名称为com.javatpoint.model的包。
步骤10:在包com.javatpoint.model中创建一个模型类。我们创建了一个名为Books的模型类。在Books类中,我们完成了以下操作:
Books.java
package com.javatpoint.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.javatpoint.controller的包。
步骤12:在包com.javatpoint.controller中创建一个Controller类。我们创建了一个名为BooksController的控制器类。在BooksController类中,我们执行了以下操作:
BooksController.java
package com.javatpoint.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.javatpoint.model.Books;
import com.javatpoint.service.BooksService;
//mark class as Controller
@RestController
public class BooksController
{
//autowire the BooksService class
@Autowired
BooksService booksService;
//creating a get mapping that retrieves all the books detail from the database
@GetMapping("/book")
private List getAllBooks()
{
return booksService.getAllBooks();
}
//creating a get mapping that retrieves the detail of a specific book
@GetMapping("/book/{bookid}")
private Books getBooks(@PathVariable("bookid") int bookid)
{
return booksService.getBooksById(bookid);
}
//creating a delete mapping that deletes a specified book
@DeleteMapping("/book/{bookid}")
private void deleteBook(@PathVariable("bookid") int bookid)
{
booksService.delete(bookid);
}
//creating post mapping that post the book detail in the database
@PostMapping("/books")
private int saveBook(@RequestBody Books books)
{
booksService.saveOrUpdate(books);
return books.getBookid();
}
//creating put mapping that updates the book detail
@PutMapping("/books")
private Books update(@RequestBody Books books)
{
booksService.saveOrUpdate(books);
return books;
}
}
步骤13:在src / main / java文件夹中创建一个名称为com.javatpoint.service的软件包。
步骤14:创建一个Service类。我们在com.javatpoint.service包中创建了一个名为BooksService的服务类。
BooksService.java
package com.javatpoint.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.javatpoint.model.Books;
import com.javatpoint.repository.BooksRepository;
//defining the business logic
@Service
public class BooksService
{
@Autowired
BooksRepository booksRepository;
//getting all books record by using the method findaAll() of CrudRepository
public List getAllBooks()
{
List books = new ArrayList();
booksRepository.findAll().forEach(books1 -> books.add(books1));
return books;
}
//getting a specific record by using the method findById() of CrudRepository
public Books getBooksById(int id)
{
return booksRepository.findById(id).get();
}
//saving a specific record by using the method save() of CrudRepository
public void saveOrUpdate(Books books)
{
booksRepository.save(books);
}
//deleting a specific record by using the method deleteById() of CrudRepository
public void delete(int id)
{
booksRepository.deleteById(id);
}
//updating a record
public void update(Books books, int bookid)
{
booksRepository.save(books);
}
}
步骤15:在src / main / java文件夹中创建一个名称为com.javatpoint.repository的包。
步骤16:创建一个Repository接口。我们在com.javatpoint.repository包中创建了一个名为BooksRepository的存储库接口。它扩展了Crud Repository接口。
BooksRepository.java
package com.javatpoint.repository;
import org.springframework.data.repository.CrudRepository;
import com.javatpoint.model.Books;
//repository that extends CrudRepository
public interface BooksRepository extends CrudRepository
{
}
现在,我们将在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 console
spring.h2.console.enabled=true
注意:不要忘记启用H2控制台。
创建所有类和包之后,项目目录如下所示。
现在,我们将运行该应用程序。
步骤18:打开SpringBootCrudOperationApplication.java文件并将其作为Java应用程序运行。
SpringBootCrudOperationApplication.java
package com.javatpoint;
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:打开邮递员,然后执行以下操作:
{
"bookid": "5433",
"bookname": "Core and Advance Java",
"author": "R. Nageswara Rao",
"price": "800"
}
成功执行请求后,它会显示Status: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。单击“连接”按钮,如下所示。
单击“连接”按钮后,我们将在数据库中看到“图书”表,如下所示。
步骤21:单击Books表,然后单击Run按钮。该表显示了我们插入到正文中的数据。
步骤22:打开邮递员,并发送URL为http:// localhost:8080 / books的GET请求。它返回我们已插入数据库中的数据。
让我们发送URL为http:// localhost:8080 / book / {bookid}的GET请求。我们已经指定了Bookid 6830 。它返回ID为6830的书的详细信息。
同样,我们也可以发送DELETE请求以删除一条记录。假设我们要删除ID为5433的书记录。
选择DELETE方法并调用URL http:// localhost:8080 / book / 5433。同样,在H2控制台中执行Select查询。我们看到ID为5433的书已从数据库中删除。
同样,我们也可以通过发送PUT请求来更新记录。让我们更新ID为6321的书的价格。
{
"bookid": "6321",
"bookname": "Data Structures and Algorithms in Java",
"author": "Robert Lafore",
"price": "500"
}
现在,移至H2控制台,查看更改是否已反映。我们看到这本书的价格已更改,如下所示。