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


関連記事

SQL, Mybatis, OR, O/R

【MyBatis】IN句にパラメータを設定する方法

SpringアプリケーションにおいてMybatisを使用する状況を想定した実装例です。 期待値 IN句に複数のパラメータが設定されたSQL文が発行されること [crayon-63d9d580e7b8d …

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

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。 ここでは3つのオブジェクトを作成していきます。 – 会計オブジェクト:会計金額の算出 – 請求書オブ …

【SpringSecurity】#1~ ログイン画面の実装(認証)

概要 SpringSecurityを導入してユーザ認証機能を実現します。 まずはログイン認証機能が使えるようになることを目標にしていますので、 本記事で解説する構成は最小限にとどめています。   準備 …

【Java入門】起動パラメータを付けて起動してみよう!

概要 Javaプログラムを起動する際に、何らかのパラメータ(値)を付けて起動することができます。 今はこのメリットがわからないと思いますが、そういうことができるんだなというレベルで理解しておいて頂けれ …

【SpringSecurity】#3~ 独自のログイン画面

概要 オリジナルのログイン画面を実装する方法です。 以下の内容になっています。 ログイン用のHTMLを用意する。 Controllerにログインの遷移先を定義する。 SecurityConfigクラス …

SpringFramworkの良書

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

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