1. Введение
В этом руководстве мы узнаем, как сортировать результаты запроса с помощью Spring Data .
Во-первых, мы рассмотрим схему данных, которые мы хотим запросить и отсортировать. Затем мы обсудим, как этого добиться с помощью Spring Data.
Давайте начнем!
2. Тестовые данные
Ниже у нас есть некоторые примеры данных. Хотя мы представили его здесь в виде таблицы, мы могли бы использовать любую из баз данных, поддерживаемых Spring Data, для ее сохранения.
Вопрос, на который мы собираемся ответить, звучит так: «Кто какое место занимает в авиакомпании?» Чтобы сделать это более удобным для пользователя, мы будем сортировать по номеру места.
| Имя | Фамилия | Номер места |
| Джилл | Смит | 50 |
| Канун | Джексон | 94 |
| Фред | Блоги | 22 |
| Рики | Бобби | 36 |
| Сия | Колиси | 85 |
3. Домен
Чтобы создать репозиторий данных Spring , нам нужно предоставить класс домена, а также тип идентификатора.
Здесь мы смоделировали нашего пассажира как объект JPA, но мы могли бы так же легко смоделировать его как документ MongoDB или любую другую абстракцию модели:
@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;
@Basic(optional = false)
@Column(nullable = false)
private int seatNumber;
// constructor, getters etc.
}
4. Сортировка с данными Spring
В нашем распоряжении есть несколько различных вариантов сортировки с помощью Spring Data.
4.1. Сортировка по ключевому слову метода OrderBy
Одним из вариантов является использование производного метода Spring Data, при котором запрос генерируется из имени метода и подписи.
Все, что нам нужно сделать здесь, чтобы отсортировать наши данные, — это включить ключевое слово OrderBy
в имя нашего метода вместе с именем(ями) свойства и направлением (Asc или Desc), по которому мы хотим сортировать.
Мы можем использовать это соглашение для создания запроса, который возвращает наших пассажиров в порядке возрастания по номеру места:
interface PassengerRepository extends JpaRepository<Passenger, Long> {
List<Passenger> findByOrderBySeatNumberAsc();
}
Мы также можем комбинировать это ключевое слово со всеми стандартными именами методов Spring Data.
Давайте посмотрим на пример метода, который находит пассажиров по фамилии и
заказы по номеру места:
List<Passenger> findByLastNameOrderBySeatNumberAsc(String lastName);
4.2. Сортировка с параметром сортировки
Наш второй вариант — включить параметр Sort
, указывающий имя (имена) свойства и направление, по которому мы хотим сортировать:
List<Passenger> passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));
В этом случае мы используем метод findAll()
и добавляем параметр Sort
при его вызове.
Мы также можем добавить этот параметр в определение нового метода:
List<Passenger> findByLastName(String lastName, Sort sort);
Наконец, если, возможно, мы листаем страницы, мы можем указать нашу сортировку в объекте Pageable
:
Page<Passenger> page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));
5. Вывод
У нас есть два простых варианта сортировки данных с помощью Spring Data: получение метода с использованием ключевого
слова OrderBy или использование объекта Sort
в качестве параметра метода.
Как всегда, код, использованный в этой статье, доступен на GitHub .