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

当ページのリンクには広告が含まれています。
目次

概要

画面から送信されたデータを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内では、受け取ったエンティティの値をマッピングしたり、取得結果をエンティティにマッピングしている。

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次