iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Software Development

Spring boot 從零到寫出ChatGPT系列 第 13

Spring boot 從零開始 (13) - 一起完成一個CRUD的Case吧 !

  • 分享至 

  • xImage
  •  

Hello ~ 昨天我們分享了JPA的常用find語法之後,今天我們就來好好完成一個CRUD的教學吧!

我們一樣以圖書館為範例,

新增資料

我們在插入新的資料可以用save的方式把資料存入資料庫,另外這邊可以注意一下,如果有對資料庫的資料有異動的時候,建議要加上@Transactional,如果有發生異常的時候,才可以整筆進行Rollback喔!
@Transactional的使用也是博大精深,我們會在後面跟大家好好介紹一下!

    @Transactional
    public void createBook() {
        Book book = new Book();
        book.setBookId(999);
        book.setName("Hello World");
        book.setAuthor("Winnie");
        bookRepo.save(book);
    }

更新資料

要更新資料的時候,我們要記得一定要先去查詢該本資料是否存在,如果存在之後,我們取出這筆資料來更新,這樣如果當table是有設定unique條件的時候,才不會出現duplicate的情況喔!
那update的語法我們一定要save來進行。

    @Transactional
    public void updateBook(int bookId, Book book) throws BadRequestException {
        Book book1 = findBookById(bookId);
        if(Objects.isNull(book1)) {
           throw new BadRequestException("Can not find book");
        } else {
            book1.setAuthor(book.getAuthor());
            book1.setName(book.getName());
        }
        bookRepo.save(book1);
    }

刪除資料

有兩種方法都可以執行delete的動作,第一種一樣是在service這邊寫一個method來先查詢到資料後,透過delete語法來進行刪除資料的動作。

    @Transactional
    public void deleteBook(int bookId) throws BadRequestException {
        Book book1 = findBookById(bookId);
        if(Objects.isNull(book1)) {
            throw new BadRequestException("Can not find book");
        } 
        bookRepo.delete(book1);
    }

第二種是在 Repository那層宣告,透過JpaRepository語法進行刪除資料的動作。

@Repository
public interface BookRepo extends JpaRepository<Book, Integer> {
    void deleteById(Integer bookId);
}

昨天和今天的介紹就是Spring data JPA的使用方式,讓我們減少了編寫重複程式碼的工作,使用上也變得更加方便吧!!!!!


上一篇
Spring boot 從零開始 (12) - Spring Data JPA讓資料庫處理變得更輕鬆 (下集)
下一篇
Spring boot 從零開始 (14) - Lombok讓你的程式碼變得更簡潔
系列文
Spring boot 從零到寫出ChatGPT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言