Перейти к основному содержимому

Сортировка результатов запроса с помощью данных Spring

· 3 мин. чтения

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 .