0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Spring Boot】名前をあいまい検索する方法

Last updated at Posted at 2025-05-06

はじめに

Springを使って、データベースに登録されている名前を「あいまい検索(部分一致検索)」できるように実装しようとしたところ、思いのほか苦戦したので、備忘録として手順とコードをまとめておきます。

サンプルコード

サンプルコード
User.java
package com.example.demo;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;

@Entity
@Table(name="users")
public class User {

    @Column(name="name")
    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}
UserRepository.java
package com.example.demo;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findByNameLike(String name);
}

SearchController.java
package com.example.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SearchController {

    @Autowired
    UserRepository userRepository;

    @RequestMapping("/search")
    public ModelAndView searchCode(
            ModelAndView mv,
            @RequestParam(value = "name", defaultValue = "") String name) {

        List<User> users = new ArrayList<>();

        // 検索
        // 名前が空欄の場合は実行しない
        if (!name.equals("")) {
            users = userRepository.findByNameLike("%" + name + "%");
        }

        // 検索した名前がヒット
        if(!users.isEmpty()){
            mv.addObject("users", users);
        }

        mv.setViewName("users");
        return mv;
    }
}

プログラムの簡単な解説

あいまい検索の処理は、SearchController.javaの部分で実行されています。

SearchController.java
if (!name.equals("")) {
    users = userRepository.findByNameLike("%" + name + "%");
}

findByNameLikeメソッドの引数には、検索キーワードを%で囲んだ文字列を渡しています。これにより、名前の部分一致検索が可能になります(例:%太郎% で「山田太郎」や「太郎丸」などがヒットします)。

このfindByNameLikeメソッドは、UserRepository.javaで定義しています。Spring Data JPAの機能を活用することで、メソッド名だけでSQLのようなあいまい検索を実現できるのが特徴です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?