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

概要 Supplierとは供給者という意味です。 その名の通り、引数を取らずに戻り値を受け取ります。   基本的な使い方 Supplier<T> getメソッドによってT型の結果を受け取り …

CSV/TSVデータを作成するVBAツールを公開

【追記:2020年8月1日】 UTF-8(BOM無し)に対応しました。 業務でテスト用のCSVファイルを作成することがよくあるので、自分でツールを作成しました。 TSVにも対応しています。 基本仕様 …

2進数を使うと判定がシンプルになる!(じゃんけんプログラム編)

概要 仕事で2進数を使った判定処理について学んだので共有したくて執筆しました。 仕事上で設計したロジックは本記事で紹介するものより複雑でしたが、本質的な部分は変わらないので使って頂けると思います。 説 …

【Bootstrap】共通ヘッダーをナビバーとしてデザインしよう!

概要 ヘッダーをナビバーとして実装します。 (SpringBootチュートリアルの共通ヘッダーを基に解説していきます) また、デザインはBootstrapのサンプルを基にしていますので、 そちらも一度 …

【SpringBoot入門】#7~ 検索画面の作成

概要 書籍情報を検索するフォーム(検索フォーム)と検索結果を表示する画面(検索結果一覧)を作成します。 検索フォームと検索結果一覧はHTMLファイルを分けて作成しています。 分けることは必須ではなく、 …

SpringFramworkの良書

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

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