Spring Data Repositoryを使用した大文字と小文字を区別しないクエリ

1. 概要

Spring Data JPAクエリは、デフォルトで大文字と小文字を区別します。 つまり、フィールド値の比較では大文字と小文字が区別されます。
このチュートリアルでは、* Spring Data JPAリポジトリで大文字と小文字を区別しないクエリをすばやく作成する方法を調べます。*

2. 依存関係

まず、https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa [Spring Data]とand httpshttps://www.baeldung.com/java-in-memoryがあることを確認しましょう。 -databases [H2] _pom.xml_のデータベース依存関係:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
    <version>1.4.199</version>
</dependency>
これらの最新バージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7C(g%3A%22org.springframework.boot%22%20AND%20a%3A%22spring-bootで入手できます。 -starter-data-jpa%22)%20OR%20(g%3A%22com.h2database%22%20AND%20a%3A%22h2%22)[Maven Central。]

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_が_âfrœFredである_Passenger_が含まれています。一致。

5. 結論

このクイックチュートリアルでは、Spring Dataリポジトリで大文字と小文字を区別しないクエリを作成する方法を学びました。
最後に、コード例がhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-jpa-2[Github上にあります。