Рубрики
Без рубрики

Запросы без учета регистра с хранилищем данных Spring

Узнайте, как создать запрос без учета регистра в хранилище данных Spring.

Автор оригинала: Shubhra Srivastava.

1. Обзор

Запросы Spring Data JPA по умолчанию чувствительны к регистру. Другими словами, сравнение значений полей чувствительно к регистру.

В этом руководстве мы рассмотрим, как быстро создать запрос без учета регистра в репозитории Spring Data JPA.

2. Зависимости

Во-первых, давайте убедимся, что у нас есть Spring Data и H2 зависимости от базы данных в вашем pom.xml :


    org.springframework.boot
    spring-boot-starter-data-jpa
    2.4.0


    com.h2database
    h2
    runtime
    1.4.199

Последние версии этих программ доступны на Maven Central.

3. Начальная настройка

Допустим, у нас есть Passenger сущность с id , именем и фамилией атрибутами:

@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 для запросов без учета регистра

Теперь предположим, что мы хотим выполнить поиск без учета регистра, чтобы найти всех пассажиров с заданным именем.

Для этого мы определим наш Пассажирский репозиторий как:

@Repository
public interface PassengerRepository extends JpaRepository {
    List 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 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)));
}

Несмотря на то, что в качестве аргумента был передан “Фред” , наш возвращенный список пассажиров содержит Пассажира с именем как “Фред”. Очевидно, что с помощью ключевого слова IgnoreCase мы добились соответствия без учета регистра.

5. Заключение

В этом кратком руководстве мы узнали, как создать запрос без учета регистра в хранилище данных Spring.

Наконец, примеры кода доступны на GitHub .