プログラミング Java

【SpringBoot入門】#6~ 登録機能の実装

投稿日:2020年12月13日 更新日:

概要

画面から送信されたデータをDBに登録する機能を実装します。
入力データはバリデーションによってチェックされることとします。

サーバサイドは以下のように各層で処理分けされます。

<Contoroller>
View(画面)からパラメータを受け取り、ドメイン側(Service)へ処理を委譲します。
バリデーションチェックはここで行われます。

<Service>
ビジネスロジックを実装します。
今回の登録機能はDBにデータを登録するだけなので、永続層(Repository)にModelを渡します。
 
<Repository>
データの永続処理を実装します。
実装はMybatis(XML)によるINSERT文です。
Seiviceから受け取ったModelをDBに登録します。

 

バリデーションチェック

今回の登録機能では以下のチェックを行います。
・必須チェック
・桁数チェック
・正規表現チェック
・フォーマットチェック

実装

BookFormクラスにアノテーションで各チェックを実装していきます。

・@Size(min=1, max=100)
 最小桁数=1、最大桁数=100を指定します。

・@Pattern(regexp = “^[0-9]{13}$”)
 「regexp」に指定した正規表現と一致することのチェックを行います。

・@NotNull
 Nullの場合、エラーと判定します。

・@Min(0)
 最小値=0を指定します。

・@DateTimeFormat(pattern=”yyyy-MM-dd”)
「pattern」で受け取る値のフォーマットを定義することで、受けとった値を日付フォーマットに変換します。

BookControllerでエラー判定を行い、エラーがあればViewに返します。

・@Validated BookForm form
 画面からリクエストされた値を受け取るとともに、バリデーションチェックを行います。
 formのフィールド名と画面のname属性が対応するため、同名同士で値がマッピングされます。
 (例)name属性(isbn) ⇒ フィールド名(isbn)

・BindingResult result
 formのバリデーションにエラーがある場合に、エラー内容が格納されます。

 

エラーメッセージの定義

application.propertiesに、messages.propertiesの設定を追記します。
配置場所:src/main/ersource/application.properties

 
messages.propertiesを作成します。
配置場所:src/main/ersource/messages.properties

 

エラーメッセージの表示

add.htmlの以下の部分がエラー時のメッセージ表示処理です。

 

Model

エンティティであるBook.javaを作成します。

・@Data
 Lombokのアノテーション(Setter/Getterを書かなくても使えるようにしてくれます)

 

Service

登録処理とISBNコードの存在チェックを行う。

・@Service
 Serviceクラスであることを指定します。

・@Transactional
 DB操作のトランザクション範囲を定義できる。
 アノテーションを付けたメソッドを単位として1トランザクションとなる。
 今回のようにクラスに着けた場合、クラス内のすべてのメソッドにアノテーションを付けたことになる。

 

Repository

RepositoryではDB操作を行うインターフェースを提供します。
実際のDB操作はXMLでSQLを記述します。

・@Mapper
 MybatisのためのMapper実装だということを示します。

配置先は、Repositoryインターフェースのパッケージ階層と同じになるように配置します。
配置先:/src/main/resources/com/example/demo/domain/repository/BookRepository.xml

・<insert id=”save”>
 INSERT文を実行する定義です。
 Repositoryに渡したエンティティのフィールド名と#{XXXX}が対応します。
 (例)Book.name ⇒ #{nane}

・<select id=”existsIsbn” resultMap=”book”>
 SELECT文を実行する定義です。
 取得結果をresultMap=”book”でマッピング先として定義します。
 ”book”は、<resultMap type=”com.example.demo.domain.model.Book” id=”book”>のidに対応します。
 このマッピングにより、「com.example.demo.domain.model.Book」のエンティティに取得結果がマッピングされたオブジェクトを取得できます。
 取得できない場合、bookオブジェクトはNULLです。

 

動作確認

・画面からの値がControllerにリクエストされていること(System.out.printで確認)
・エラーとなる値はバリデーションエラーとなること。
 また、登録画面を表示し、エラーメッセージも表示されること。
・ISBNコードを既に登録済みのデータを登録しようとするとエラーとなること。
 また、登録済みでない(論理削除されているものも含む)のであればエラーとならないこと。
・登録成功後、MySQL Workbenchで登録データを確認し、それが画面で入力した通りであること。
 また、検索一覧画面に遷移すること。

 

まとめ

・画面からリクエストされた値はFormでバリデーションする。
・バリデーションエラーの場合、エラーメッセージを画面に表示して登録処理を中断する。
・Contoroller⇒Service⇒Repositoryと各層で適切な処理を担当させる。
・MybatisはXMLでSQLを記述する。
・XML内では、受け取ったエンティティの値をマッピングしたり、取得結果をエンティティにマッピングしている。

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

ランキング評価する

-プログラミング, Java
-

執筆者:


comment

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

CAPTCHA


関連記事

【Java】モジュールシステムの概要と実装例

概要 Javaのモジュールシステムについて、概念的なイメージと実際のコード例で理解を深めるための記事です。 読者はJava Silverの資格勉強中の方やJava入門者を想定しています。 内容は以下の …

【Java入門】演算子の種類と使い方まとめ

概要 Javaで使う演算子(計算を行うための記号)について、種類と使い方をまとめました。 備忘録として使ってください。   演算子 代入演算子 値の代入や代入時に計算を行う演算子です。 [crayon …

【SpringBoot入門】#2~ 開発環境を準備しよう(DB)

DB(MySQL) ダウンロード MySQLダウンロード 私の環境がWindowsのため、画像はWindows用になっています。 あなたの環境に合わせたOSを選択してDLして下さい。 インストール ダ …

映画のレイティング判定をStateパターンで実装する

ユーザが見ることができる作品を、映画のレイティングシステムに従って選別できるように実装します。 映画のレイティングシステムとは、年齢制限する規制のことです。 G:全年齢 PG12:12歳以上 R15+ …

no image

【PHP】配列と連想配列と多次元配列の説明と使用例

配列とは? 1つの変数に複数の値を持つものです。 整数型や文字列型は1つの変数に1つの値を持ちますが、配列は同じようなデータの集まりを1つの変数に持つことができるようになっています。 配列には通常の添 …

SpringFramworkの良書

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

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