Динамические запросы
Пользовательские динамические запросы
Для того чтобы воспользоваться динамическими запросами, определите необходимый метод в
пользовательском 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
Больше примеров можно найти в тестах.