プログラミング Java

【SpringBoot入門】#8~ 検索機能の実装

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

概要

・検索フォームから条件を指定して検索すると、条件に一致する結果が一覧画面に表示される。
・検索条件は複合的に指定できることとする。
・検索結果は適切にフォーマットされることとする。
 (日付はyyyy年MM月dd日など)
 

検索条件のリクエスト

リクエストの受信(Controller)

前回(【SpringBootチュートリアル】#7~ 検索画面の作成)作成した画面で、
検索ボタン押下のリクエスト「th:action=”@{/book/search}”」に対応させるメソッドをControllerに定義します。

・@RequestParam Map<String,String>
 リクエストするパラメータが複数ある場合、Mapとして取得することができます。
 Mapでは、<Key, Value>を<画面項目名, 画面項目値>として保持しています。
 (例)書籍名の場合:<name, Javaの基本>

処理の委譲(Service)

サービス層ではビジネスロジックを組み立てます。
検索処理においては特別なロジックはないため、レポジトリ層に直接パラメータを渡した結果を受け取るだけです。

 

DB接続(Repository)

・selectMany(Map<String, String> params);
 selectMany:後述のXMLファイルのidになります。
 引数には検索パラメータが渡されます。

SQL(XMLファイル定義)

・<resultMap type=”com.example.demo.domain.model.Book” id=”book”>
 ここではBook(エンティティ)のフィールド名とテーブルのカラム名をマッピングさせています。
 column:テーブルのカラム名
 property:Book(エンティティ)のフィールド名

・<select id=”selectMany” resultMap=”book”>
 BookRepositoryのメソッド名(selectMany)が対応しています。
 また、resultMapは取得結果のマッピング先の指定であり、
 <resultMap type=”com.example.demo.domain.model.Book” id=”book”>のidに対応しています。

・if test
 指定したフィールドの値を検査し、条件に合致した場合のみif内のステートメントを追加します。

・<bind name=”name_pattern” value=”‘%’ + name + ‘%'” />
 name(書籍名)は部分一致検索を実装するため、nameの前後に%を付与します。
 ただ、%を文字列として直接ステートメントに記述できないため、name_patternに置き替えるためにbind(紐づけて)させています。

・<choose> <when test >
 choose:タグ内の複数条件のうち、最初に合致した条件のみを適用します。
 (例)price_from/price_to
  price_from/price_toの両方が入力されていた場合、
  最初の条件に合致するため、後続のwhenは判定されません。
  もし、price_from/price_toのいずれかが未入力であれば、
  後続のwhenへと処理が進みます。

・<![CDATA[ >= ]]>
 XML内で記述した記号を、ただの文字列として扱うための指定です。
 これが無いと、「=, <, >」をXML文書として認識してしまうので、
 文字列として扱わせるために記号をCDATAセクションで囲っています。
 

検索結果の表示

検索一覧画面に表示する書式は、データによって整形することとしていますので、以下のようにします。

ISBN 3桁-1桁-6桁-2桁-1桁区切り
価格 0を3つ毎にカンマ区切り
出版年月日 yyyy年MM月dd日

※イメージは前回記事(【SpringBootチュートリアル】#7~ 検索画面の作成)参照

これでView側(list.html)に、整形された書籍情報が表示されます。
 

まとめ

・複数パラメータのリクエストは、@RequestParamでMapにマッピングして取得可能。
・Mybatisのif, choose-whenステートメントによって検索条件を動的に指定できる。
・検索結果一覧への表示用にメソッドを用意すると、画面では表示メソッドをコールするだけで済む。

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

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

難しい,困難,頭を抱える

オブジェクト指向が難しいと思うならこれを読め!

オブジェクト指向はJava、JavaScript、PHP、Python、Rubyなどなど 色んな言語で使われているパラダイム(考え方)です。 上から順に追っていくだけ(手続き型)ではわからない仕組みに …

【Java】文字列の完全一致と部分一致を判定する方法

Stringオブジェクトのmatches、containsメソッドを使った説明です。 戻り値:boolean ■追記(2022/5/4) ・前方一致にstartWithメソッドの用例 ・後方一致にen …

【Bootstrap】ログイン画面をデザインしよう!

概要 【SpringSecurity】#3~ 独自のログイン画面でシンプルな独自のログイン画面を実装しました。 これに、Bootstrapでデザインを施していきます。 Bootstrapのサンプルを基 …

junit, テスト, junit5

【Junit5】表示名のカスタマイズ(@DisplayName)

概要 Junit5で表示名をカスタマイズする方法です。 Junit4については以下を参考にしてください。  ↓ https://irof.hateblo.jp/entry/20130124/p1 でき …

ぴったり

【Java初心者向け】自分のレベルに合った入門書の探し方

Javaを勉強しようとし始めた今、まずは適切な教材を見つけるのが最初の一歩になります。 この記事ではあなたに自分のレベルにあった入門書の探し方を教えたいと思います。 自分のレベルを把握する Javaを …

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

[保有資格]
・Java SE 11 Gold

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

SpringFramworkの良書

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

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