«1. Введение
В этом руководстве мы узнаем, как сортировать результаты запроса с помощью Spring Data.
Сначала мы рассмотрим схему данных, которые необходимо запросить и отсортировать.
А затем мы углубимся в то, как получить эти данные Spring.
Начнем!
2. Тестовые данные
Ниже приведены некоторые примеры данных. Хотя мы представили его здесь в виде таблицы, мы могли бы использовать любую из баз данных, поддерживаемых Spring Data, для ее сохранения.
Вопрос, на который мы хотим ответить, звучит так: «Кто какое место занимает в авиакомпании?», но чтобы сделать его более удобным для пользователя, мы хотим отсортировать его по номеру места.
First Name | Last Name | Seat Number |
---|---|---|
Jill | Smith | 50 |
Eve | Jackson | 94 |
Fred | Bloggs | 22 |
Ricki | Bobbie | 36 |
Siya | Kolisi | 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 Data
Мы в нашем распоряжении есть несколько различных вариантов сортировки с помощью 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. Сортировка с помощью параметра сортировки
Наш второй вариант — включить параметр сортировки, указывающий имя(я) свойства и направление, по которому мы хотим сортировать:
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.
«