1. 概要

Spring Data JPAクエリは、デフォルトでは大文字と小文字が区別されます。 つまり、フィールド値の比較では大文字と小文字が区別されます。

このチュートリアルでは、 SpringDataJPAリポジトリで大文字と小文字を区別しないクエリをすばやく作成する方法について説明します。

2. 依存関係

まず、pom.xmlSpringDataおよびH2データベースの依存関係があることを確認しましょう。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
    <version>1.4.199</version>
</dependency>

これらの最新バージョンは、MavenCentralで入手できます。

3. 初期設定

id、firstName 、およびlastName属性を持つPassengerエンティティがあるとします。

@Entity
class Passenger {
 
    @Id
    @GeneratedValue
    @Column(nullable = false)
    private Long id;
 
    @Basic(optional = false)
    @Column(nullable = false)
    private String firstName;
 
    @Basic(optional = false)
    @Column(nullable = false)
    private String lastName;
 
    // constructor, static factory, getters, setters
}

また、データベースにサンプル Passenger データを入力して、テストクラスを準備しましょう。

@DataJpaTest
@RunWith(SpringRunner.class)
public class PassengerRepositoryIntegrationTest {

    @PersistenceContext
    private EntityManager entityManager;
    @Autowired
    private PassengerRepository repository;

    @Before
    public void before() {
        entityManager.persist(Passenger.from("Jill", "Smith"));
        entityManager.persist(Passenger.from("Eve", "Jackson"));
        entityManager.persist(Passenger.from("Fred", "Bloggs"));
        entityManager.persist(Passenger.from("Ricki", "Bobbie"));
        entityManager.persist(Passenger.from("Siya", "Kolisi"));
    }
    
    //...
}

4. 大文字と小文字を区別しないクエリのIgnoreCase

ここで、大文字と小文字を区別しない検索を実行して、特定のfirstName。を持つすべての乗客を検索するとします。

そのために、PassengerRepositoryを次のように定義します。

@Repository
public interface PassengerRepository extends JpaRepository<Passenger, Long> {
    List<Passenger> findByFirstNameIgnoreCase(String firstName);
}

ここ、 IgnoreCaseキーワードは、クエリの一致で大文字と小文字が区別されないようにします。

JUnitテストを使用してテストすることもできます。

@Test
public void givenPassengers_whenMatchingIgnoreCase_thenExpectedReturned() {
    Passenger jill = Passenger.from("Jill", "Smith");
    Passenger eve = Passenger.from("Eve", "Jackson");
    Passenger fred = Passenger.from("Fred", "Bloggs");
    Passenger siya = Passenger.from("Siya", "Kolisi");
    Passenger ricki = Passenger.from("Ricki", "Bobbie");

    List<Passenger> passengers = repository.findByFirstNameIgnoreCase("FrED");

    assertThat(passengers, contains(fred));
    assertThat(passengers, not(contains(eve)));
    assertThat(passengers, not(contains(siya)));
    assertThat(passengers, not(contains(jill)));
    assertThat(passengers, not(contains(ricki)));
}

引数として“ FrED” を渡しましたが、返されたpassengers のリストには、firstNameであるPassengerが含まれています。 明らかに、 IgnoreCase キーワードを使用して、大文字と小文字を区別しない一致を実現しました。

5. 結論

このクイックチュートリアルでは、SpringDataリポジトリで大文字と小文字を区別しないクエリを作成する方法を学びました。

最後に、コード例はGitHubから入手できます。