По состоянию на Spring Data JPA 1.7.0 (выпуск Эванса).
Вы можете использовать недавно введенные ключевые слова Top
и First
, которые позволяют вам определять методы запроса следующим образом:
findTop10ByLastnameOrderByFirstnameAsc(String lastname);
Spring Data автоматически ограничит результаты указанным вами числом (по умолчанию 1, если не указано). Обратите внимание, что здесь упорядочение результатов становится актуальным (либо с помощью предложения OrderBy
, как показано в примере, либо путем передачи параметра Sort
в метод). Подробнее об этом читайте в блоге, посвященном новым функциям выпуска релиза Spring Data Evans или в документации .
Для предыдущих версий
Для извлечения только фрагментов данных в Spring Data используется абстракция нумерации страниц, которая поставляется с интерфейсом Pageable
на запрашивающей стороне, а также абстракция Page
на стороне результатов. Так что вы можете начать с
public interface UserRepository extends Repository<User, Long> {
List<User> findByUsername(String username, Pageable pageable);
}
и используйте его так:
Pageable topTen = new PageRequest(0, 10);
List<User> result = repository.findByUsername("Matthews", topTen);
Если вам нужно узнать контекст результата (какая это на самом деле страница? Это первая? Сколько всего?), Используйте Page
в качестве типа возврата:
public interface UserRepository extends Repository<User, Long> {
Page<User> findByUsername(String username, Pageable pageable);
}
Код клиента может сделать что-то вроде этого:
Pageable topTen = new PageRequest(0, 10);
Page<User> result = repository.findByUsername("Matthews", topTen);
Assert.assertThat(result.isFirstPage(), is(true));
Не то чтобы мы запускали проекцию подсчета фактического запроса, который будет выполнен, если вы используете Page
в качестве типа возврата, так как нам нужно выяснить, сколько всего элементов в общей сложности для вычисления метаданных. Кроме того, убедитесь, что вы действительно оснастили PageRequest
информацией для сортировки, чтобы получить стабильные результаты. В противном случае вы можете запустить запрос дважды и получить другие результаты, даже если данные не изменились.