プログラミング 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】ArrayListの使い方まとめ

概要 ArrayListはOracleの公式ページでも明記しているクラスです。 Java SE 11 Programmer I (1Z0-815-JPN) 試験 インタフェースによる抽象化 インタフェ …

【Java入門】クラスの基本

概要 以前、クラスとインスタンスの違いでクラスについて簡単に触れました。 ここではクラスの内容を掘り下げて説明していきます。   クラスの構成 クラスの基本構成は以下の3つです。 ・フィールド  :ク …

【Java】オブジェクト指向の練習題材(成績オブジェクト)

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。 ここでは2つのオブジェクトを作成していきます。 成績オブジェクト:教科と点数などを保持 生徒オブジェクト:氏名と成績を保持 …

Springメモ(あれ、どうすんだっけ?)

@Autowiredアノテーションをつけることができる箇所(3つ) ・フィールド変数 ・コンストラクタの引数 ・setterの引数 ※引用 【後悔しないための入門書】Spring解体新書: Sprin …

【SpringBoot入門】#11~ 削除ダイアログの作成

概要 検索結果から削除機能を呼び出した際に、削除を確認するためのダイアログです。 実装はjQueryで行いますので、mavenへの追加作業等の準備を別途行います。 イメージ jQueryの準備 jQu …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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