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:
- 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.
- 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í
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