はじめに
自身の知識のアウトプットも兼ねて、新人研修用に作成した記事となります。Spring Bootを学び始めた方を対象とした内容になっています。
登録情報一覧画面の表示については、前回の記事を参照ください。
概要
検索ボックスを追加し、企業IDに紐づく企業情報を検索できるようにする機能を作成します。
完成イメージ
未登録の企業IDが検索された場合は、エラーメッセージを表示します。
パッケージ構成
赤枠で囲ったHTMLファイルを今回作成していきます。また、青枠で囲ったクラスを編集していきます。

Serviceクラスの修正
指定したIDの企業情報をデータベースから取得するための処理を追加します。
配置先:src > main > java > com > example > demo > service > CompanyService.java
package com.example.demo.service;
import java.util.Optional;
@Service
public class CompanyService {
// 企業情報一覧の取得(全件)
// 企業IDによる企業情報の取得(1件)
@Transactional
public Optional<Company> getCompanyById(Long companyId) {
return repository.findById(companyId);
}
}
public Optional<***> メソッド名(引数)
getCompanyById()は、指定したcompanyIdをもとにデータベースから企業情報を1件取得しようとするメソッドです。メソッドの引数として、Long 型の companyIdを受け取ります。
このメソッドの戻り値はOptional<Company>です。Optionalは、結果が存在しない可能性のある場合に使用されるクラスであり、Optionalを使用することで呼び出し元でのnullチェックを簡単に行うことができます。
repository.findById(companyId);
repositoryがデフォルトで持つ findById メソッドを利用して、データベースから companyId に紐づく特定の企業情報を1件検索します。(SELECT * FROM company WHERE company_id = "企業ID"; が実行されるイメージ)
findById メソッドは、データが見つからなかった場合に Optional.empty() を返し、データが見つかった場合は Optional に Companyオブジェクトを格納して返します。
Controllerクラスの修正
CompanyController.javaにID検索をするメソッドを追加します。
配置先:src > main > java > com > example > demo > controller > CompanyController.java
@Controller
public class CompanyController {
// 企業情報一覧画面の表示
// ID検索処理
@GetMapping("company/search")
public String search(@RequestParam Long companyId, Model model) {
model.addAttribute("companies", companyService.getCompanyById(companyId).orElse(null));
return "index";
}
}
@RequestParam Long companyId
@RequestParam アノテーションは、リクエストパラメータを取得するためのアノテーションです。
リクエストパラメータの companyId を取得し、Long型の変数 companyId に格納します。このパラメータは、URLに「?companyId=123」のように付与することで渡されます。
companyService.getCompanyById(companyId).orElse(null)
・companyService.getCompanyById(companyId):
companyService(サービスクラス)の getCompanyById メソッドを呼び出し、引数として渡した companyIdを持つ企業情報を取得します。
・.orElse(null):
もし指定された companyId の企業が見つからなかった場合、nullを返します。
今回は指定された企業IDに基づいて企業情報を取得し、Viewに表示するだけのシンプルな実装となっています。
本来は、企業IDが入力されなかったり無効な値が入った場合にエラーハンドリングを行う必要があります。
Viewの修正
index.htmlに検索ボックスを追加します。また、未登録の企業IDが検索された場合にメッセージが表示されるようにします。
配置先:src > main > resources > templates > index.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>企業一覧画面</title>
</head>
<body>
<h1>企業情報一覧画面</h1>
<a th:href="@{/company/register}">新規登録</a>
<!-- 検索ボックス -->
<form th:action="@{/company/search}" method="get">
<input type="text" name="companyId" placeholder="企業IDを入力してください">
<button type="submit">検索</button>
</form>
<!-- 検索対象の企業IDが未登録の場合にメッセージを表示 -->
<div th:if="!${companies}">
<p>登録された企業はありません。</p>
</div>
<!-- 登録企業一覧表示 -->
</body>
検索ボックス
入力された企業ID(companyId)はクエリパラメータとして /company/search エンドポイントにGETリクエスト(method="get")で送信されます。
メッセージの表示
th:if="!${companies}" で companiesオブジェクトが null または 空 である場合にのみ、この <div> が表示される条件を設定しています。つまり、検索IDに紐づく企業が1件も登録されていないときに「登録された企業はありません。」とメッセージが表示されます。
データの流れ
企業IDに基づく企業情報を検索し、検索結果が表示されるまでの流れは以下の通りです。
- ユーザーが検索ボックスに企業IDを入力し、「検索」ボタンを押下する
- リクエストパラメータである
companyIdは「/company/search?companyId=123」のような形でコントローラーへ渡される -
CompanyControllerのsearchメソッドが呼び出され、companyId が 123として取得される -
companyServiceのgetCompanyByIdが呼び出され、IDが123の企業情報がデータベースから取得される - 取得された企業情報がモデルに設定される
- ビュー(
index.html)がレンダリングされ、ブラウザに表示される
次回は登録データの詳細画面を実装していきます。



