Sorting Query Results with Spring Data

1. Introduction

In this tutorial, we’re going to learn how to sort query results with Spring Data.

First, we’ll take a look at the schema of the data that want to query and sort.

And then, we’ll dive right into how to achieve that Spring Data.

Let’s get started!

2. The Test Data

Below we have some example data. Although we have represented it here as a table we could use any one of the databases supported by Spring Data to persist it.

The question we want to answer is, “Who is occupying which seat on the airline?” but to make that more user-friendly we want to sort by seat number.

First NameLast NameSeat Number
JillSmith50
EveJackson94
FredBloggs22
RickiBobbie36
SiyaKolisi85

3. Domain

To create a Spring Data Repository we need to provide a domain class as well as an id type.

Here we’ve modeled our passenger as a JPA entity, but we could just as easily have modeled it as a MongoDB document or any other model abstraction:

@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. Sorting with Spring Data

We have a few different options at our disposal for sorting with Spring Data.

4.1. Sorting With the OrderBy Method Keyword

One option would be to use Spring Data’s method derivation whereby the query is generated from the method name and signature.

All we need to do here to sort our data is include the keyword OrderBy in our method name along with the property name(s) and direction (Asc or Desc) by which we want to sort.

We can use this convention to create a query that returns our passengers in ascending order by seat number:

interface PassengerRepository extends JpaRepository<Passenger, Long> {

    List<Passenger> findByOrderBySeatNumberAsc();
}

We can also combine this keyword with all the standard Spring Data method names.

Let’s see an example of a method that finds passengers by last name and orders by seat number:

List<Passenger> findByLastNameOrderBySeatNumberAsc(String lastName);

4.2. Sorting with a Sort Parameter

Our second option is to include a Sort parameter specifying the property name(s) and direction by which we want to sort:

List<Passenger> passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));

In this case, we’re using the findAll() method and adding the Sort option when calling it.

We can also add this parameter to a new method definition:

List<Passenger> findByLastName(String lastName, Sort sort);

Finally, if perhaps we are paging, we can specify our sort in a Pageable object:

Page<Passenger> page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));

5. Conclusion

We have two easy options for sorting data with Spring Data through method derivation using the OrderBy keyword or using the Sort object as a method parameter.

As always, you can find the code over on GitHub.

Related posts:

Java Program to Implement ConcurrentSkipListMap API
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Properties with Spring and Spring Boot
Receive email using IMAP
Java Program to Perform Naive String Matching
Tránh lỗi NullPointerException trong Java như thế nào?
Java Program to Implement ScapeGoat Tree
Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java
Working with Kotlin and JPA
Java Program to Give an Implementation of the Traditional Chinese Postman Problem
Java Program to Find Hamiltonian Cycle in an UnWeighted Graph
Hướng dẫn Java Design Pattern – Service Locator
Spring RestTemplate Error Handling
Spring Security Login Page with React
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Using Optional with Jackson
Lập trình đa luồng trong Java (Java Multi-threading)
Java Program to Check Cycle in a Graph using Graph traversal
A Quick Guide to Spring Cloud Consul
New Features in Java 8
Extract links from an HTML page
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Encode a String to UTF-8 in Java
Java – Convert File to InputStream
Mockito and JUnit 5 – Using ExtendWith
Introduction to Java Serialization
Java Program to Implement Hamiltonian Cycle Algorithm
Semaphore trong Java
Sử dụng CountDownLatch trong Java
The Java 8 Stream API Tutorial
Java Program to Implement Stack using Two Queues