Bird
Raised Fist0
Spring Bootframework~5 mins

Pagination and sorting with Pageable in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the purpose of the Pageable interface in Spring Boot?
The Pageable interface helps to request a specific page of data with a defined size and sorting order. It makes it easy to handle pagination and sorting in database queries.
Click to reveal answer
beginner
How do you specify sorting when using Pageable?
You can specify sorting by using PageRequest.of(page, size, Sort.by("fieldName").ascending()) or PageRequest.of(page, size, Sort.by("fieldName").descending()) to sort the results by a field in ascending or descending order.
Click to reveal answer
intermediate
What does the Page object returned by a repository method contain?
The Page object contains the list of items for the requested page, total number of pages, total number of elements, current page number, and page size. It helps to navigate through paged data easily.
Click to reveal answer
beginner
How can you enable pagination and sorting in a Spring Data JPA repository method?
Add a Pageable parameter to the repository method signature, for example: Page<Entity> findAll(Pageable pageable);. Spring Data will automatically apply pagination and sorting based on the Pageable argument.
Click to reveal answer
advanced
What is the difference between Pageable and Slice in Spring Data?
Pageable returns a Page which contains total count information, while Slice only knows if there is a next slice available and does not fetch total count, which can improve performance when total count is not needed.
Click to reveal answer
Which method creates a Pageable object for page 2 with 10 items per page sorted by 'name' ascending?
APageRequest.of(0, 10, Sort.by("name").ascending())
BPageRequest.of(2, 10, Sort.by("name").ascending())
CPageRequest.of(1, 10, Sort.by("name").ascending())
DPageRequest.of(1, 10, Sort.by("name").descending())
What does the Page interface provide besides the list of items?
AOnly the list of items
BSorting configuration only
CDatabase connection info
DTotal pages, total elements, current page number, page size
How do you add pagination support to a Spring Data JPA repository method?
AAdd a <code>Pageable</code> parameter to the method
BAdd a <code>Sort</code> parameter only
CUse <code>List</code> return type
DNo changes needed
Which of the following is true about Slice compared to Page?
A<code>Slice</code> does not contain total count information
B<code>Slice</code> contains total pages info
C<code>Slice</code> fetches all data at once
D<code>Slice</code> is deprecated
What is the default sort direction if not specified in Pageable?
AAscending
BNo sorting applied
CRandom
DDescending
Explain how to implement pagination and sorting in a Spring Boot REST API using Pageable.
Think about how to request a specific page and sort order, and how to return the data with helpful info.
You got /4 concepts.
    Describe the difference between Page and Slice in Spring Data pagination.
    Focus on what metadata each provides and when you might prefer one over the other.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using Pageable in Spring Boot?
      easy
      A. To fetch data in small chunks with optional sorting
      B. To connect to the database directly
      C. To write SQL queries manually
      D. To handle user authentication

      Solution

      1. Step 1: Understand Pageable's role

        Pageable is used to request data in pages, not all at once.
      2. Step 2: Recognize sorting feature

        It also supports sorting data by fields while fetching pages.
      3. Final Answer:

        To fetch data in small chunks with optional sorting -> Option A
      4. Quick Check:

        Pageable = Pagination + Sorting [OK]
      Hint: Pageable means small pages + sorting [OK]
      Common Mistakes:
      • Thinking Pageable connects to database
      • Confusing Pageable with authentication
      • Assuming Pageable writes SQL queries
      2. Which of the following is the correct way to create a Pageable object for page 2, size 5, sorted by "name" ascending?
      easy
      A. PageRequest.of(1, 5, Sort.by("name"))
      B. PageRequest.of(2, 5, Sort.asc("name"))
      C. PageRequest.of(2, 5, Sort.by("name"))
      D. PageRequest.create(2, 5, Sort.by("name"))

      Solution

      1. Step 1: Understand zero-based page index

        Page numbers start at 0, so page 2 means index 1.
      2. Step 2: Check method and sorting syntax

        Use PageRequest.of(page, size, Sort.by("field")) for ascending sort.
      3. Final Answer:

        PageRequest.of(1, 5, Sort.by("name")) -> Option A
      4. Quick Check:

        Page index zero-based + Sort.by correct [OK]
      Hint: Page index starts at 0, so page 2 is index 1 [OK]
      Common Mistakes:
      • Using page number directly instead of zero-based index
      • Using non-existent methods like Sort.asc
      • Using PageRequest.create instead of PageRequest.of
      3. Given this repository method call:
      repository.findAll(PageRequest.of(0, 3, Sort.by("age")))
      What will be the result?
      medium
      A. Error because Sort direction is missing
      B. First 3 records sorted by age descending
      C. All records without sorting
      D. First 3 records sorted by age ascending

      Solution

      1. Step 1: Analyze PageRequest parameters

        Page 0 means first page, size 3 means 3 records, Sort.by("age") defaults to ascending.
      2. Step 2: Understand repository behavior

        findAll with Pageable returns that page of sorted data.
      3. Final Answer:

        First 3 records sorted by age ascending -> Option D
      4. Quick Check:

        Page 0 + size 3 + ascending sort = first 3 sorted [OK]
      Hint: Sort.by defaults to ascending if direction not set [OK]
      Common Mistakes:
      • Assuming descending sort without direction
      • Thinking all records are returned
      • Expecting error due to missing direction
      4. What is wrong with this code snippet?
      Pageable pageable = PageRequest.of(1, 10, Sort.asc("date"));
      medium
      A. Page index should start at 0, not 1
      B. Sort.asc() method does not exist
      C. Page size cannot be 10
      D. PageRequest.of requires 4 parameters

      Solution

      1. Step 1: Check Sort method usage

        Spring Data uses Sort.by(), not Sort.asc().
      2. Step 2: Verify other parameters

        Page index 1 and size 10 are valid; PageRequest.of takes 3 parameters here.
      3. Final Answer:

        Sort.asc() method does not exist -> Option B
      4. Quick Check:

        Use Sort.by() for sorting [OK]
      Hint: Use Sort.by(), not Sort.asc() [OK]
      Common Mistakes:
      • Using Sort.asc() or Sort.desc() which don't exist
      • Thinking page index must be 0 always
      • Believing PageRequest.of needs 4 parameters
      5. You want to fetch the third page of size 4, sorted by "price" descending and then by "name" ascending. Which Pageable creation is correct?
      hard
      A. PageRequest.of(2, 4, Sort.by("price", "name"))
      B. PageRequest.of(3, 4, Sort.by("price").descending().and(Sort.by("name")))
      C. PageRequest.of(2, 4, Sort.by(Sort.Order.desc("price"), Sort.Order.asc("name")))
      D. PageRequest.of(2, 4, Sort.by("price").desc().and(Sort.by("name").asc()))

      Solution

      1. Step 1: Identify zero-based page index

        Third page means index 2 (0,1,2).
      2. Step 2: Create Sort with multiple orders

        Use Sort.by(Order.desc("price"), Order.asc("name")) to combine sorting directions.
      3. Step 3: Check syntax correctness

        PageRequest.of(2, 4, Sort.by(Sort.Order.desc("price"), Sort.Order.asc("name"))) uses correct PageRequest.of and Sort.by with orders.
      4. Final Answer:

        PageRequest.of(2, 4, Sort.by(Sort.Order.desc("price"), Sort.Order.asc("name"))) -> Option C
      5. Quick Check:

        Page 2 + size 4 + multi-sort orders correct [OK]
      Hint: Use Sort.Order for multi-direction sorting [OK]
      Common Mistakes:
      • Using page number 3 instead of index 2
      • Trying to chain .desc() or .asc() methods that don't exist
      • Passing multiple fields without specifying order