エンジニア大学ではSpring Bootで簡単なWebアプリを開発する方法を発信しています。
Javaの基礎学習が終わった方へ
・Spring BootでWebアプリを開発する
・更新機能・・・・・・前回の記事
・GitHubに全コード上がっています!
今回はSpring Bootでデータベースのデータを削除する、削除機能を実装していきます。
処理の流れとしては以下のようになります。
- 画面でリンクが押されたときに、削除するデータのidをサーバーに送る
- サーバーでidを受け取り、データベースからデータを削除する
今回のそれほど複雑な処理を行う必要はありません。
bookList.html
bookList.htmlではデータベースの情報を一覧表示しています。
BookController.javaにデータを削除するリクエストを送るためのリンクを付け加えます。
<td><a th:href="@{/book-delete(id=*{id})}">削除</a></td>
一覧画面の記事はこちら
bookList.htmlは次のようになります。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>本の一覧表示</title>
<link rel="stylesheet" th:href="@{/webjars/bootstrap/5.2.2/css/bootstrap.min.css}"/>
</head>
<body>
<div th:replace="share::header"></div>
<div class="container">
<div class="row">
<div th:each="book : ${bookList}" th:object="${book}" class="card col-3 me-2 mb-2" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title" th:text="*{title}"></h5>
<p class="card-text" th:text="*{price} + 円"></p>
<a class="btn btn-success" th:href="@{/book-edit(id=*{id})}">編集</a>
<a class="btn btn-danger" th:href="@{/book-delete(id=*{id})}">削除</a>
</div>
</div>
</div>
<a class="btn btn-primary mt-3" th:href="@{/book-create}">新規追加</a>
</div>
</body>
</html>
BookController.java
次にBookController.javaに本を削除するメソッドを追加します。
deleteBookメソッド
BookControllerにdeleteBookメソッドを追加します。
deleteBookメソッドでは画面から送られてくる、削除対象のデータのidを受け取ります。
受け取ったidを、BookServiceのdeleteメソッドに渡して、データの削除を行います。
// 本の削除を行う
@GetMapping("/book-delete")
public String deleteBook(Model model, Book Book) {
// データベースのデータを削除する
service.delete(Book.getId());
// 本の一覧画面にリダイレクト
return "redirect:/book-list";
}
・受け取ったidのデータを削除
・一覧画面の表示
Controller全体像
package com.uhablog.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.uhablog.form.BookForm;
import com.uhablog.form.EditBookForm;
import com.uhablog.model.Book;
import com.uhablog.service.BookService;
@Controller
public class BookController {
@Autowired
BookService service;
// 本の一覧画面を表示する
@GetMapping("/book-list")
public String bookList(Model model) {
// serviceを使って、本の一覧をDBから取得する
List<Book> bookList = service.findAll();
// modelに本の一覧を設定して、画面に渡す
model.addAttribute("bookList", bookList);
// bookList.htmlの表示
return "bookList";
}
・
・
・
// 本の削除を行う
@GetMapping("/book-delete")
public String deleteBook(Model model, Book Book) {
// データベースのデータを削除する
service.delete(Book.getId());
// 本の一覧画面にリダイレクト
return "redirect:/book-list";
}
}
BookService.java
BookService.javaにサーバーからデータを削除するメソッドを作成します。
deleteメソッドの作成
今回はdeleteメソッドで削除を行います。
repositoryクラスのdeleteByIdメソッドに引数として受け取った、削除対象のデータのidを渡します。
// 本を削除する
public void delete(Integer id) {
// idを指定して、データベースからデータを削除する
repository.deleteById(id);
}
受け取ったidのデータを削除
Serviceクラスの全体像
package com.uhablog.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.uhablog.form.BookForm;
import com.uhablog.form.EditBookForm;
import com.uhablog.model.Book;
import com.uhablog.repository.BookRepository;
@Service
@Transactional
public class BookService {
@Autowired
BookRepository repository;
// データベースから本の一覧を取得する
public List<Book> findAll() {
return repository.findAll();
}
・
・
・
// 本を削除する
public void delete(Integer id) {
// idを指定して、データベースからデータを削除する
repository.deleteById(id);
}
}
BookRepository.java
Serviceクラスから呼び出されて、データの削除を行うBookRepository.javaです。
package com.uhablog.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.uhablog.model.Book;
public interface BookRepository extends JpaRepository<Book, Integer> {
}
Book.java
データベースのテーブルに対応したクラスを用意して、Javaでデータを扱います。
package com.uhablog.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table(name = "booksinfo")
public class Book {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
// 本のidを保持するフィールド
private Integer id;
@Column(name="title")
// 本のタイトルを保持するフィールド
private String title;
@Column(name="price")
// 本の値段を保持するフィールド
private Integer price;
}
動作確認
サーバーを起動させて、動作確認を行います。
削除ボタンを押すとデータを削除することができます。
今回の記事では削除ボタンを実装しました。
以上でSpring Bootハンズオン全7回が終了です!お疲れ様でした。
挫折せずにプログラミングを学ぶためには?
僕はプログラミングで挫折した経験があります。
エラーの連続やエラーが解消しても思った通りに動かないといったことが原因で、プログラミングが嫌いでした。
当時はパソコンの基礎すら分からず、Googleでの検索力もありませんでした。
「プログラミングって全然意味わからないし、全然楽しくない」そう思っていました。
そんな僕でも今はエンジニアとして働けています。
エンジニアとなった今、初心者の方は周りの人に聞ける環境というのがとても大切だと感じています。
周りに聞ける人がいない時は、学習環境を手に入れるためにお金を払うというのも一つの方法です。
それができるのが、プログラミングスクールのFreeksです。
Freeksは月額10,780円で現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
多くのプログラミングスクールが数十万円払って通うところを月額10,780円から通うことができるのはコスパが良いです。
しかもサブスク制で、自分のペースで学ぶことができ嫌になったらすぐにやめることができます。
Freeksでは無料カウンセリングを行なっています。
「周りに誰も聞ける人がいなくて、エラーが解決できない」「プログラミング全然楽しくない」という方は、無料カウンセリングを受けてみて下さい。
【関連記事】Freeks評判、口コミ