Перейти к содержанию

Динамические запросы

Пользовательские динамические запросы

Для того чтобы воспользоваться динамическими запросами, определите необходимый метод в пользовательском Repository. Например:

import org.springframework.data.repository.PagingAndSortingRepository;

public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {

  List<Person> findByName(String name);

  List<Person> findPersonByNameAfter(String name);
}
Заметка

Больше информации о динамических запросах в официальной документации

Заметка

Доступны следующие методы и ключевые слова:

  • findBy
  • deleteBy
  • existsBy
  • countBy

Ключевые слова:

  • True
  • False
  • Equal
  • LessThan
  • LessThanEqual
  • GreaterThan
  • GreaterThanEqual
  • Between
  • IsNull
  • Distinct
  • IsEmpty
  • ExistsBy
  • First
  • Top
  • After
  • Before
Важно

На данный момент поддерживаются только методы с одним предикатом (не поддерживаются AND или OR).

Заметка

В версию tarantool-spring-data32 добавлена возможность использовать в производных методах интерфейс Limit

Важно:

  • Максимальное количество ожидаемых результатов должно быть положительным числом, в ином случае будет выброшено исключение.
  • Приоритетность ограничения количества записей в результате:
    • Limit.of(...) приоритетнее статического ограничения в названии метода (ключевые слова Top/First).
  • Статическое ограничение в названиях методов приоритетнее Limit.unlimited() или передачи null в качестве Limit.

Примеры:

List<Person> result = repository.findPersonByIdGreaterThanEqual(0, Limit.of(10)); // вернет <= 10 записей
// ...
List<Person> result = repository.findPersonByIdGreaterThanEqual(0, Limit.unlimited()); // вернет <= 100 записей
// ...
List<Person> result = repository.findPersonByIdGreaterThanEqual(0, null); // вернет <= 100 записей
// ...
List<Person> result = repository.findTop4ByIdGreaterThanEqual(0, Limit.of(10)); // вернет <= 10 записей
// ...
List<Person> result = repository.findTop4ByIdGreaterThanEqual(0, Limit.unlimited()); // вернет <= 4 записей
// ...
List<Person> result = repository.findTop4ByIdGreaterThanEqual(0, null); // вернет <= 4 записей
// ...
List<Person> result = repository.findPersonByIdGreaterThanEqual(0, Limit.of(-10)); // выбросит IllegalArgumentException

Больше примеров можно найти в тестах.