プログラミング 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ポートフォリオ】なぜスクレイピングツールがおすすめか?

なぜスクレイピングツールか? ・スキルに需要がある ・総合的なスキルが身に付く ・個人開発に応用できる スキルに需要がある 執筆時点(2021年3月28日)時点で、ランサーズに1643件の発注がありま …

【Java】ArrayListの最長文字列を取得する簡単な方法

(追記)2020/08/19 1. Listが空の場合(NoSuchElementException)に対応しました。 2. Nullが含まれていた場合、空文字として扱うように修正しました。 Arra …

Jacksonで日付がずれる場合、Timezone設定を直す

現象 JacksonでCSV出力する際、日付がズレて出力される。   原因 タイムゾーンの設定がTokyo/Asiaになっていない。   対策 application.proper …

【SpringBoot入門】#12~ 削除機能の実装

概要 ダイアログでOK押下された場合の削除処理を実行します。 画面からリクエストされた書籍情報IDをキーに、論理削除を実装します。 システム開発ではほとんどの場合、論理削除を行います。 物理削除するの …

Camtasia(カムタジア)でKrisp(クリスプ)を使う方法

Camtasiaで動画撮影する時のノイズ除去にKrispを導入する方法です。 前提 Krisp(無料版でOK)をインストール済みであること。 Pro版を試したい方は以下の招待URLからダウンロードして …

記事を探す

SpringFramworkの良書

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

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