プログラミング Java

【SpringBootチュートリアル】#12~ 削除機能の実装

投稿日:2021年1月23日 更新日:

概要

ダイアログでOK押下された場合の削除処理を実行します。
画面からリクエストされた書籍情報IDをキーに、論理削除を実装します。
システム開発ではほとんどの場合、論理削除を行います。
物理削除するのは、洗い替えでデータを全て入れ替えるときくらいしか私は知りません。
 

フロントエンド

リクエスト

検索結果の削除ボタンからリクエストします。
その際、書籍情報IDとVersionが送信します。

・書籍情報ID
 削除するキーになります。

・version
 削除対象が他のユーザによって更新されていない場合のみ削除できるよう、
 versionの値でチェックするために使用します。

楽観ロックのエラー表示

list.html(検索一覧)に、楽観ロックにより削除できなかった場合の
エラー表示枠を作成しておきます。

 

バックエンド

Controller

・serviceへの委譲
 idとversionを引数に処理を委譲します。
 他のユーザによって既に削除済か、更新されている場合は
 削除できない旨のエラーメッセージが返却されます。

・エラーメッセージの返却
 楽観ロックでエラーが発生した場合、画面上で表示できるように
 エラーメッセージをmodelに格納しておきます。

Service

・楽観ロックによるチェック
 更新処理時と同じで、楽観ロックによるチェックを行います。
 もし既に削除済か更新されていた場合は、楽観ロックの例外(OptimisticLockingFailureException)が発生するようにしておきます。

・削除処理
 削除済でも更新されてもいない場合は、削除処理を実行します。
 Repositoryには、書籍情報ID、version、削除ユーザIDを引数に渡します。

Repository

BookRepostory.javaには、メソッドのみを実装します。

SQLをXMLに記述します。

・更新カラム
 削除ユーザは引数の値とし、削除日時は実行日時とします。

・条件
 引数で渡された、書籍情報IDとversionとします。
 

動作確認

  • 削除処理が正常に実行されること
    1. 検索一覧で任意の書籍情報の削除ボタンを押下する。
    2. 削除ダイアログでOKボタンを押下する。
    3. 検索を実行し、削除した書籍情報が表示されていないこと。
    4. MySQL Workbenchでテーブルを参照し、削除したレコードの削除日時、削除ユーザが更新されていること。
  • 削除処理がキャンセルされること
    1. 検索一覧で任意の書籍情報の削除ボタンを押下する。
    2. 削除ダイアログでキャンセルボタンを押下する。
    3. 検索を実行し、キャンセルした書籍情報が表示されていること。
  • 楽観ロックによって削除が失敗すること
    1. 任意の条件で検索する。
    2. 検索結果の画面を複製する(Chrome想定[画面のタブを右クリック ⇒ タブを複製]
    3. 複製元画面の検索一覧から任意の書籍情報を編集する。
    4. 複製先画面の検索一覧から、複製元画面で編集した書籍情報と同じものを削除する。
    5. 削除処理に失敗した旨のエラーメッセージが検索画面に表示されること。

まとめ

  • 削除処理は論理削除で実装する。
  • 削除するキーはテーブルのユニークキー(今回の場合は書籍情報ID)である。
  • versionは楽観ロックとして活用する。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【SpringBootチュートリアル】#13~ 独自のエラー画面の作成

概要 何らかのエラーが発生した場合に、エラー画面を表示して対応したいことがあります。 デフォルトのwhite label Error pageのままというわけにはいかないので、 独自のエラー画面を作成 …

【SpringBootチュートリアル】#5~ 登録画面の作成

概要 共通ヘッダーの「新規登録」リンクから遷移する、書籍情報登録画面を作成します。 遷移できるようにControllerの作成と、遷移先である画面をHTMLで作成していきます。   Formクラスの作 …

【Javaサンプル】自動販売機(Level4) ドメイン駆動

前回(Level3) Level3ではクラス分けすることを行いました。 しかし、私の目指すところのドメイン駆動開発になっていません。 また、ロジックもまだまだ複雑さが残っており、ぱっと見て何をやってい …

Facadeパターンの使い道をコードとクラス図で説明します。

Facadeパターンはどんな役に立つか? 簡単にいうと、複数の処理のまとめ役。 なので、依頼1つでいろんな仕事をやってくれる点で役に立つ。 Facadeパターンの要件 Facadeクラスはあくまでサブ …

【Java】TDDして汎用的な部品を作成する(日付期間オブジェクト)

目的 TDDブートキャンプというセミナーに参加して面白かったので、 自分で何かやってみようと思った。 仕様 日付期間を保持するオブジェクトである。 開始日と終了日を持つ。 開始日と終了日を持つことをど …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。