SpringBoot 增刪改查

什么是CRUD操作?

CRUD 代表 創(chuàng)建,讀取/檢索,更新刪除。這些是持久性存儲(chǔ)的四個(gè)基本功能。

可以將CRUD操作定義為用戶界面約定,該約定允許通過基于計(jì)算機(jī)的表單和報(bào)告查看,搜索和修改信息。 CRUD是面向數(shù)據(jù)的,是 HTTP動(dòng)作動(dòng)詞的標(biāo)準(zhǔn)化用法。 HTTP有一些重要的動(dòng)詞。

POST: 創(chuàng)建新資源 GET: 讀取資源 PUT: 更新現(xiàn)有資源 DELETE: 刪除資源

在數(shù)據(jù)庫中,這些操作中的每一個(gè)都直接映射到一系列命令。但是,它們與RESTful API的關(guān)系稍微復(fù)雜一些。

標(biāo)準(zhǔn)CRUD操作

創(chuàng)建操作: 它執(zhí)行INSERT語句以創(chuàng)建新記錄。 讀取操作: 它根據(jù)輸入?yún)?shù)讀取表記錄。 更新操作: 它在表上執(zhí)行一條update語句。它基于輸入?yún)?shù)。 刪除操作: 它將刪除表中的指定行。它也基于輸入?yún)?shù)。

CRUD操作的工作原理

CRUD操作是最動(dòng)態(tài)的網(wǎng)站的基礎(chǔ)。因此,我們應(yīng)該將 CRUD HTTP 動(dòng)作動(dòng)詞區(qū)分開來。

假設(shè)我們要 創(chuàng)建一條新記錄,我們應(yīng)該使用HTTP操作動(dòng)詞 POST 。要 更新一條記錄,我們應(yīng)該使用 PUT 動(dòng)詞。同樣,如果要 刪除記錄,則應(yīng)使用 DELETE 動(dòng)詞。通過CRUD操作,用戶和管理員有權(quán)在線檢索,創(chuàng)建,編輯和刪除記錄。

我們有許多執(zhí)行CRUD操作的選項(xiàng)。最有效的選擇之一是在SQL中創(chuàng)建一組存儲(chǔ)過程來執(zhí)行操作。

CRUD操作引用關(guān)系數(shù)據(jù)庫應(yīng)用程序中實(shí)現(xiàn)的所有主要功能。 CRUD的每個(gè)字母都可以映射到SQL語句和HTTP方法。

操作SQL HTTP動(dòng)詞RESTful Web服務(wù)
Create INSERT PUT/POST POST
Read SELECTGETGET
Update UPDATE PUT/POST/PATCH PUT
Delete DeleteDeleteDelete

Spring Boot CrudRepository

Spring Boot提供了一個(gè)名為 CrudRepository 的接口,其中包含用于CRUD操作的方法。它在包 org.springframework.data.repository 中定義。它擴(kuò)展了Spring Data 存儲(chǔ)庫界面。它在存儲(chǔ)庫上提供通用的Crud操作。如果要在應(yīng)用程序中使用CrudRepository,則必須創(chuàng)建一個(gè)接口并擴(kuò)展 CrudRepository 。

語法

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

其中

T 是存儲(chǔ)庫管理的域類型。 ID 是存儲(chǔ)庫管理的實(shí)體的ID類型。

例如:

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

在上面的示例中,我們創(chuàng)建了一個(gè)名為 StudentRepository 的接口,該接口擴(kuò)展了CrudRepository。其中 Student 是要管理的存儲(chǔ)庫,而 Integer 是Student存儲(chǔ)庫中定義的ID類型。

Spring引導(dǎo)JpaRepository

JpaRepository提供了與JPA相關(guān)的方法,例如刷新,持久性上下文,并批量刪除了一條記錄。它在包 org.springframework.data.jpa.repository中定義。 JpaRepository擴(kuò)展了 CrudRepository PagingAndSortingRepository。

例如:

public interface BookDAO extends JpaRepository 
{
}


Spring Boot CRUD操作

為什么要使用這些接口?

這些接口允許Spring查找存儲(chǔ)庫接口并為此創(chuàng)建代理對象。 它提供了允許我們執(zhí)行一些常見操作的方法。我們還可以定義自定義方法。

CrudRepository與JpaRepository

CrudRepository JpaRepository
CrudRepository沒有提供任何用于分頁和排序的方法。JpaRepository擴(kuò)展了PagingAndSortingRepository。它提供了實(shí)現(xiàn)分頁的所有方法。
它用作標(biāo)記界面。JpaRepository擴(kuò)展了 CrudRepository PagingAndSortingRepository
它僅提供CRUD功能。例如 findById(),findAll()等。它提供了一些額外的方法以及PagingAndSortingRepository和CrudRepository的方法。例如, flush(),deleteInBatch()。
在不需要JpaRepository和PagingAndSortingRepository提供的功能時(shí)使用。當(dāng)我們要在應(yīng)用程序中實(shí)現(xiàn)分頁和排序功能時(shí)使用。

Spring Boot CRUD操作示例

讓我們設(shè)置一個(gè)Spring Boot應(yīng)用程序并執(zhí)行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: 添加依賴項(xiàng) Spring Web,Spring Data JPA, H2數(shù)據(jù)庫。

步驟6: 單擊 Generate (生成)按鈕。當(dāng)我們單擊"生成"按鈕時(shí),它將規(guī)格包裝在 Jar 文件中,并將其下載到本地系統(tǒng)。

Spring Boot CRUD操作

步驟7: 提取 Jar文件并將其粘貼到STS工作區(qū)中。

步驟8: 將項(xiàng)目文件夾導(dǎo)入STS。

文件->導(dǎo)入->現(xiàn)有Maven項(xiàng)目->瀏覽->選擇文件夾spring-boot-crud-operation->完成

導(dǎo)入需要一些時(shí)間。

步驟9: 在目錄中創(chuàng)建名稱為 com.nhooo.model 的程序包。文件夾 src/main/java。

步驟10: 在包 com.nhooo.model中創(chuàng)建類。 我們創(chuàng)建了一個(gè)名為 Books的類。 在"圖書"類中,我們執(zhí)行了以下操作:

定義四個(gè)變量 bookid, bookname, author, 生成Getter和Setters。
右鍵單擊文件-> Source-> Generate Getters和Setters。
使用注解 @Entity將類標(biāo)記為Entity。 使用注解 @Table,將該類標(biāo)記為 Table 名稱。 通過使用注解 @Column 將每個(gè)變量定義為 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文件夾中創(chuàng)建一個(gè)名稱為 com.nhooo.controller 的包。

步驟12: 在包 com.nhooo.controller中創(chuàng)建一個(gè)Controller類。 我們創(chuàng)建了一個(gè)名為 BooksController的控制器類。 在BooksController類中,我們完成了以下操作:

使用注解 @RestController將類標(biāo)記為 RestController 。 使用注解 @Autowired 自動(dòng)注解 BooksService 類。 定義以下方法: getAllBooks(): 。它返回所有書籍的列表。 getBooks(): 它返回我們在path變量中指定的書籍詳細(xì)信息。通過使用注解@PathVariable,我們已將bookid作為參數(shù)傳遞。注解指示方法參數(shù)應(yīng)綁定到URI模板變量。 deleteeBook(): 它將刪除我們在path變量中指定的特定書籍。 saveBook(): 保存圖書詳細(xì)信息。注解@RequestBody表示應(yīng)將方法參數(shù)綁定到Web請求的正文。 update(): 該方法更新一條記錄。我們必須在正文中指定要更新的記錄吃了為了達(dá)到相同的目的,我們使用了@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;
//將類標(biāo)記為 Controller
@RestController
public class BooksController 
{
    //自動(dòng)裝配BooksService類
    @Autowired
    BooksService booksService;
    //創(chuàng)建從數(shù)據(jù)庫檢索所有圖書詳細(xì)信息的get映射
    @GetMapping("/book")
    private List<Books> getAllBooks() 
    {
    return booksService.getAllBooks();
    }
    //創(chuàng)建檢索特定書籍詳細(xì)信息的get映射
    @GetMapping("/book/{bookid}")
    private Books getBooks(@PathVariable("bookid") int bookid) 
    {
    return booksService.getBooksById(bookid);
    }
    //創(chuàng)建刪除映射,刪除指定的書
    @DeleteMapping("/book/{bookid}")
    private void deleteBook(@PathVariable("bookid") int bookid) 
    {
    booksService.delete(bookid);
    }
    //創(chuàng)建在數(shù)據(jù)庫中發(fā)布書籍詳細(xì)信息的post映射
    @PostMapping("/books")
    private int saveBook(@RequestBody Books books) 
    {
    booksService.saveOrUpdate(books);
    return books.getBookid();
    }
    //創(chuàng)建更新圖書詳細(xì)信息的put映射
    @PutMapping("/books")
    private Books update(@RequestBody Books books) 
    {
    booksService.saveOrUpdate(books);
    return books;
    }
}

步驟13: 在文件夾 src/main/java中創(chuàng)建一個(gè)名稱為 com.nhooo.service 的包。

步驟14: 創(chuàng)建一個(gè) Service 類。我們在包 com.nhooo.service中創(chuàng)建了一個(gè)名為 BooksService 的服務(wù)類。

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;
//定義業(yè)務(wù)邏輯
@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中創(chuàng)建一個(gè)名稱為 com.nhooo.repository 的包。

第16步: 創(chuàng)建一個(gè) 存儲(chǔ)庫界面。我們在包 com.nhooo.repository中創(chuàng)建了一個(gè)名為 BooksRepository 的存儲(chǔ)庫接口。 它擴(kuò)展了 Crud存儲(chǔ)庫界面。

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>
{
}

現(xiàn)在,我們將在 application.properties 文件中配置數(shù)據(jù)源 URL,驅(qū)動(dòng)程序類名稱,用戶名密碼

步驟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控制臺(tái)。

創(chuàng)建所有類和包之后,項(xiàng)目目錄如下所示。

Spring Boot CRUD操作

現(xiàn)在我們將運(yùn)行該應(yīng)用程序。

步驟18: 打開 SpringBootCrudOperationApplication.java 文件并作為Java應(yīng)用程序運(yùn)行。

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。因此,請確保您的系統(tǒng)中已經(jīng)安裝了Postman應(yīng)用程序。

步驟19: 打開 Postman并執(zhí)行以下操作:

選擇 POST 調(diào)用URL http://localhost:8080/books。 選擇Body 選擇內(nèi)容類型 JSON(application/json)。 插入數(shù)據(jù)。我們已在主體中插入以下數(shù)據(jù):

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

點(diǎn)擊發(fā)送

請求成功執(zhí)行后,它會(huì)顯示 狀態(tài): 200 OK 。這意味著記錄已成功插入數(shù)據(jù)庫中。

類似地,我們插入了以下數(shù)據(jù)。

{"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控制臺(tái)以查看數(shù)據(jù)。

步驟20: 打開瀏覽器并調(diào)用URL http://localhost:8080/h2-console。單擊 Connect 按鈕,如下所示。

Spring Boot CRUD操作

單擊 連接按鈕后,我們將在數(shù)據(jù)庫中看到 Books 表,如下所示。

Spring Boot CRUD操作

步驟21: 單擊 Books 表,然后然后點(diǎn)擊 運(yùn)行按鈕。該表顯示了我們插入到正文中的數(shù)據(jù)。

Spring Boot CRUD操作

步驟22: 打開 Postman,并發(fā)送URL為http://localhost:8080/books的 GET 請求。它返回我們插入數(shù)據(jù)庫中的數(shù)據(jù)。

Spring Boot CRUD操作

我們以URL http://localhost:8080/book/{bookid}發(fā)送 GET 請求。我們指定了 bookid 6830 。它返回ID為6830的書的詳細(xì)信息。

Spring Boot CRUD操作

同樣,我們也可以發(fā)送 DELETE 請求刪除記錄。假設(shè)我們要?jiǎng)h除ID為 5433 的圖書記錄。

選擇 DELETE 方法并調(diào)用URL http://localhost:8080/書/5433。再次在H2控制臺(tái)中執(zhí)行 Select 查詢。我們發(fā)現(xiàn)ID為 5433 的圖書已從數(shù)據(jù)庫中刪除。

Spring Boot CRUD操作

類似地,我們也可以通過發(fā)送 PUT 請求來更新記錄。讓我們更新ID為 6321 的圖書的價(jià)格。

選擇 PUT 在請求正文中,粘貼要更新的記錄并進(jìn)行更改。在本示例中,我們要更新ID為6321的書籍的記錄。在以下記錄中,我們更改了書籍的價(jià)格。

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

點(diǎn)擊發(fā)送

現(xiàn)在,移至H2控制臺(tái),查看更改是否已反映。我們看到這本書的價(jià)格已更改,如下所示。

Spring Boot CRUD操作

下載CRUD操作項(xiàng)目

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清