Spring MVC – Paginación con ejemplo

Explicaremos cómo podemos implementar la paginación en la aplicación Spring MVC. Esto es necesario cuando necesitamos mostrar una gran cantidad de datos en las páginas. Supongamos que en un sitio de comercio electrónico tenemos muchos productos, pero no podemos mostrarlos todos en una sola página, por lo que solo mostraremos 20 productos en cada página. Esto ayudará a un mejor seguimiento del producto y una excelente experiencia de usuario. La paginación se puede implementar de dos maneras:

  1. Desde cero: esto se hace consultando la base de datos utilizando el desplazamiento y el tamaño de página. Esto solo se usa si necesitamos personalizar la paginación más que el tamaño de página y el desplazamiento.
  2. Uso de repositorios precompilados: esto se hace mediante la extensión de repositorios que han implementado la paginación usando cero. Esto se usa más generalmente.

Usaremos el segundo método extendiendo desde la interfaz PagingAndSortingRepository por ejemplo, pero también podemos usar JpaRepository para lo mismo. Estas interfaces tienen las implementaciones para paginar y ordenar.

package org.springframework.data.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
   Iterable<T> findAll(Sort sort);
   Page<T> findAll(Pageable pageable);
}

Obtendremos la página de estas funciones pasando la instancia Pageable.

Pasos para implementar la paginación

Configure la base de datos y cree una entidad. 

Java

package com.geeksforgeeks.Spring.MVC.Pagination.data;
  
import lombok.Data;
import javax.persistence.*;
  
@Entity
@Table
@Data
public class Product {
  
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
  
    @Column(name = "price")
    private int price;
  
    @Column(name = "name")
    private String name;
  
}

Cree una interfaz de Repositorio que amplíe PagingAndSortingRepository.

Java

package com.geeksforgeeks.Spring.MVC.Pagination.repositories;
  
import com.geeksforgeeks.Spring.MVC.Pagination.data.Product;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
  
// we can also extend from JpaRepository here 
@Repository
public interface ProductRepository extends PagingAndSortingRepository<Product,Integer> {
  
}

Cree un servicio que realizará operaciones en los datos recuperados del repositorio. Aquí pasaremos la instancia paginable en la función findAll y eso devolverá una página. 

Java

package com.geeksforgeeks.Spring.MVC.Pagination.services;
  
import com.geeksforgeeks.Spring.MVC.Pagination.data.Product;
import com.geeksforgeeks.Spring.MVC.Pagination.repositories.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
  
import java.util.List;
  
@Service
public class ProductService {
  
    @Autowired
    private ProductRepository productRepository;
  
    public void saveAllProducts(List<Product>products){
        productRepository.saveAll(products);
    }
  
    public Iterable<Product> getAllProducts(Integer pageSize,Integer offset) {
        return productRepository.findAll(PageRequest.of(offset,pageSize));
    }
}

Cree una API de descanso que mostrará los datos en las páginas. Aquí recibiremos la página y daremos la respuesta al usuario. 

Java

package com.geeksforgeeks.Spring.MVC.Pagination.controllers;
  
import com.geeksforgeeks.Spring.MVC.Pagination.data.Product;
import com.geeksforgeeks.Spring.MVC.Pagination.services.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
  
import javax.annotation.PostConstruct;
import javax.websocket.server.PathParam;
import java.util.ArrayList;
import java.util.List;
  
@RestController
@RequestMapping
public class ProductController {
  
    @Autowired
    private ProductService productService;
  
    @PostConstruct
    public void createProducts(){
        List<Product>products = new ArrayList<>();
        for(int i=0;i<100;i++){
            Product product = new Product();
            product.setPrice(i);
            product.setName("product+"+ i);
            products.add(product);
        }
        productService.saveAllProducts(products);
    }
  
    @GetMapping("/getAll/{offset}")
    public Iterable<Product> getAllProducts(@RequestParam Integer pageSize, @PathVariable("offset") Integer offset){
        return productService.getAllProducts(pageSize,offset);
    }
}

Producción: 

La respuesta JSON del backend se verá así

Output

 

Esta respuesta luego se convierte a la interfaz de acuerdo con web, android o ios.

Publicación traducida automáticamente

Artículo escrito por bhavyajain4641 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *