Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

November Discount Launch 2022 – Top
We’re finally running a Black Friday launch. All Courses are 30% off until the end of this week:


November Discount Launch 2022 – TEMP TOP (NPI)
We’re finally running a Black Friday launch. All Courses are 30% off until the end of this week:


1. Introduction

In this tutorial, we'll learn how to sort query results with Spring Data.

First, we'll take a look at the schema of the data that we want to query and sort. Then we'll discuss how to achieve that with Spring Data.

Let's get started!

2. The Test Data

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

The question we're going to answer is, “Who is occupying which seat on the airline?” To make this more user-friendly, we'll sort by seat number.

First Name Last Name Seat Number
Jill Smith 50
Eve Jackson 94
Fred Bloggs 22
Ricki Bobbie 36
Siya Kolisi 85

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 have just as easily modeled it as a MongoDB document, or any other model abstraction:

class Passenger {

    @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 is 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're 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: method derivation using the OrderBy keyword, or using the Sort object as a method parameter.

As always, the code used in this article is available over on GitHub.

November Discount Launch 2022 – Bottom
We’re finally running a Black Friday launch. All Courses are 30% off until the end of this week:


Persistence footer banner
Comments are closed on this article!