プログラミング 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


関連記事

pageEncodingとcontentTypeのcharsetの違い

pageEncodingとcontentTypeのcharsetは処理されるタイミングが異なります。 それによって文字化けの原因につながっているので、どのように設定すればいいかを解説していきます。 違 …

【Java入門】インターフェースの使い方まとめ

概要 インターフェースとは、内部実装を知る必要なく、利用する機能の接点のみを提供する仕組みです。 接点をソフトウェア的にいうと、メソッドのシグネチャと戻り値の型に当たります。 つまり、どんなメソッドに …

【Java転職者向け】どんなポートフォリオを作成すべきか?

Javaプログラマとして開発リーダと新人教育をした立場から執筆しています。 対象読者 未経験からJavaプログラマに就職・転職しようとする方 目次 なぜポートフォリオを作成するのか? ・スキルアップ …

【Bootstrap】一覧表示をデザインしよう!

概要 一覧表示をデザインします。 Bootstrapにはすぐに使える便利なクラスが用意されているので、それらを使用して実現します。 【SpringBootチュートリアル】#7~ 検索画面の作成に変更を …

【Java入門】クラスとインスタンスの違いを分かり易い言葉で説明します。

概要 クラスとインスタンスの違いについて、できるだけ分かり易い言葉や表現で説明します。   クラス 設計書だよ。 以上です。 ほんとマジで。 どんなデータと操作が可能かを決めているだけなので設計書と表 …

記事を探す

SpringFramworkの良書

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

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