【SpringBoot入門】#12~ 削除機能の実装

当ページのリンクには広告が含まれています。
目次

概要

ダイアログで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は楽観ロックとして活用する。

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次