プログラミング Java

【SpringBoot入門】#10~ 更新機能の実装

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

概要

既に登録済みの書籍情報を画面上で編集し、更新する処理を実装します。
更新した内容が反映されていることを確認するところまでを行います。
 

フロントエンド

更新情報のリクエスト

edit.html内のformタグを再掲

/book/create へPostでリクエストすることになっているので、
Controller側でformを受信できるように実装を進めていきます。
 

バックエンド

リクエストの受信(Controller)

・メソッド名を「postUpdate」とします。
 これは送信されたリクエストメソッド(post)と処理内容(update)を組み合わせています。
 バリデーションチェックは登録時と同じように@Validatedをつけておきます。

・ISBNコードの存在チェック
 既に登録済みのISBNコードと重複しないように存在チェックを行います。
 登録時と異なり、更新前の自身のデータはチェック対象外とするため、
 除外用に自身のidを追加の引数として渡します。

・楽観ロック
 もし既に更新済みであれば、楽観ロックにより例外が送出される想定のため、
 ここで例外をキャッチしてエラーメッセージを表示させるようにします。
 (悲観ロックという方法もありますが、ロック対象が1件で処理時間もごく短いため、
 楽観ロックでも十分です)

・画面遷移
 エラーがあれば編集画面に戻します。
 エラーが無ければ検索画面に遷移させます。
 

処理の委譲(Service)

存在チェック

自身(id)を除く結果が無ければfalse[存在しない]、あればtrue(存在する)を返します。
BookRepositoryのexistsIsbnは、引数を2つ持つメソッドが無いため、
オーバーロードしたメソッドを追加で実装することになります。
 

更新処理

・変数名で更新前後のオブジェクトをわかり易く分ける
 after :更新後のオブジェクト
 bedore:更新前のオブジェクト

・更新可否のチェック
 (条件)更新前(before)が存在していること AND 更新前後Versionが同じであること
  更新前(before)が存在していないということは、何らかの処理で削除されているのでfalse
  更新前後でVersionが異なるということは、既に更新済なのでfalse
 つまり、削除もされておらず、最新の更新処理である場合に更新が行えるようになっています。

・楽観ロック例外の送出(スロー)
 上記のチェックでfalseになった場合、楽観ロックの例外(OptimisticLockingFailureException)をスローします。
 例外がスローされた場合、更新処理はロールバックされるようになっています。
 

DB接続(Repository)

existsIsbnメソッドのオーバライド

idを引数に加えたメソッドを追加しておきます。

updateメソッド

新規でメソッドを追加します。
引数にはBookオブジェクトを渡します。
 

SQL(XMLファイル定義)

existsIsbnにtestを追加

idフィールドがある場合で値が入っていれば、検索条件を追加するようにしておきます。
これで更新時には、自身のidを除いた結果だけをSELECTできるようになりました。
 

updateの追加

各カラムをUPDATEします。
処理対象は、自身(id)であり、versionが変わっておらず、有効(削除されていない)ものとします。
また、更新時にはVerisonを+1します。
これにより、バージョン管理を行っています。

更新処理の実装を確認

ISBNコードの存在チェック

 変更せずに更新可能なこと。
 変更したISBNコードが他の書籍情報で有効でない場合、更新可能な事。
 変更したISBNコードが他の書籍情報で有効な場合、エラーとなること。

更新内容の反映

 (画面上で確認可能)
 各画面項目の変更が反映されること

 (DB上で確認する)
 更新日時が更新されること
 更新者が更新されること(固定値のため、ソースコードを変更して確認してよい)
 Versionが+1されること
 

まとめ

・更新時には楽観ロックなど、他のユーザの変更内容が誤って上書きされない仕組みが必要である。
・更新時にVersionは繰り上げてバージョン管理を行うこと。

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

ランキング評価する

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

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

【Spring+Thymeleaf】HTMLの更新をビルドせずに反映させる方法

概要 Spring + Thymeleafの構成において、ビルド無しでHTMLの変更を反映する方法です。 前提 以下の構成で確認したものになります。 ・SpringBoot 2.6.4 ・Thymel …

【Javaサンプル】自動販売機(Level3) クラス分け

自動販売機(Level2)では、小さいメソッドに処理を切り出すことを学びました。 しかし、まだMainクラス1つの中で完結しているプログラムです。 オブジェクト指向言語であるJavaを使うなら、クラス …

【Bootstrap】ログイン画面をデザインしよう!

概要 【SpringSecurity】#3~ 独自のログイン画面でシンプルな独自のログイン画面を実装しました。 これに、Bootstrapでデザインを施していきます。 Bootstrapのサンプルを基 …

プログラミングを上達させるために私がやってきたこと・やっていること

私の上達過程 写経 自分のレベルに合う本をもとに写経しては、コードの意味を調べて理解し、少しづつ体に染み込ませるように身に着けていきました。 とにかく初心者のころは右も左も分からず、ちょっとしたエラー …

オブジェクト指向がわかるようになるためにする3つのこと

オブジェクト指向がいまいちわからない人向けに、 オブジェクト指向でプログラミングできるようになるまでのステップを以下にまとめました。   Javaでプログラミングする Javaはオブジェクト …

SpringFramworkの良書

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

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