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


関連記事

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

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

エンジニア未経験者の転職が難しくなったので解決策を提案してみる

現状 コロナ以降、未経験者のエンジニア採用が少しずつなくなっていきました。 それまではポートフォリオを作ったり、ある程度のポテンシャルがあると判断されれば 採用されるということがあったのですが、それが …

【JdbcTemplate】IN句に値を入れて複数件取得する方法

JdbcTemplateでIN句に毎回異なる数の値をセットして、 複数のレコードを取得する場合は、「NamedParameterJdbcTemplate」で取得することができます。 コード例 [cra …

no image

【PHP】配列と連想配列と多次元配列の説明と使用例

配列とは? 1つの変数に複数の値を持つものです。 整数型や文字列型は1つの変数に1つの値を持ちますが、配列は同じようなデータの集まりを1つの変数に持つことができるようになっています。 配列には通常の添 …

【SpringBoot入門】#3~ Index画面の作成

このチュートリアルでは、簡易な書籍管理システムを作っていきます。 まず最初にIndex画面を作成していきます。 HTML作成 以下の配下にindex.htmlを作成します。 配置先:プロジェクト(ここ …

記事を探す

SpringFramworkの良書

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

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