No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Pagination con Spring Boot

30/31
Recursos

Aportes 9

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

A continuación les dejo un consejo. Como dejé comentado en anteriores clases, hay una excelente librería llamada lombok, la podemos añadir a nuestro proyecto como dependencia en el pom.xml de la siguiente manera:

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

Una vez hecho esto, no será necesario que creemos un constructor para inyectar nuestras clases como veníamos haciendo, sólo debemos instanciar como private final las clases que deseamos inyectar y arriba de la clase en la que deseamos hacer las inyecciones poner la anotación @RequiredArgsConstructor. Les dejo un ejemplo de como quedaría la clase:

@RequiredArgsConstructor
public class Ejemplo {

	private final EjemploLombok ejemploLombok;

	public void hazAlgo() {
		ejemploLombok.hazAlgo();
	}

}

Teniendo en cuenta la clase de arriba:

  • Ejemplo es la clase en la que queremos inyectar.
  • @RequiredArgsConstructor es la anotación de lombok que nos permite inyectar a nuestra clase sin la necesidad de crear constructor.
  • EjemploLombok es la clase que inyectamos.

Pageable lol

No es necesario cambiar la herencia a PagingAndSortingRepository, porque JpaRepository ya hereda de ella.
Se puede hacer también de la siguiente manera:

@GetMapping("/lista")
public Page<User> getAlls(@PageableDefault(size = 10, page = 0) Pageable pageable){
Page<User> list = userService.findAll(pageable);
return list;
}

Donde size y page, también podrían ser recibidos a través de RequestParam

Otra forma de hacer la paginación es usar el Pageable como parámetro de entrada en el @GetMapping y enviar este a través del flujo hasta llegar a la capa repository, este te retornará un Page<User> el cual contendrá la data y otros datos adicionales como total de items, página actual, numero de items actuales, etc. para rellenar los campos de las tablas como numero de páginas, página actual, etc. etc.

URL: https://springframework.guru/spring-boot-pagination/

Reto cumplido: 😃

PageUser

@Component
public class PageUser {
    private UserService userService;

    public PageUser(UserService userService) {
        this.userService = userService;
    }

    public List<User> getAllPagination(int page, int size) {
        return userService.getAllPagination(page, size);
    }
}

UserService

    public List<User> getAllPagination(int page, int size) {
        return userRepository.findAll(PageRequest.of(page, size)).getContent();
    }

UserController

    @GetMapping("/pageable")
    List<User> getUserPageable(@RequestParam int page, @RequestParam int size) {
        return pageUser.getAllPagination(page, size);
    }

Me gusto esta clase, no conocía la implementación de la paginación en SpringBoot.

Implemente por aparte la paginación voy a dejar el código por si me pueden dar algún consejo o si a alguno le sirve.

En UserService agregue el siguiente metodo:

public List<User> getPageUsers(@RequestParam int page, @RequestParam int size) {
        return userRepository.findAll(PageRequest.of(page,size)).getContent();
}

En el paquete caseuse cree la clase “PageUser” y este seria el codigo:

@Component
public class PageUser{
    private UserService userService;
    public PageUser(UserService userService) {
        this.userService = userService;
    }
    public List<User> getPage(@RequestParam int page, @RequestParam int size) {
        return userService.getPageUsers(page, size);
    }
}

Y por ultimo en UserRestController agregue lo siguiente para consumir mi paginacion:

@GetMapping("/pageagle")
    List<User> getPage(@RequestParam int page, @RequestParam int size){
        return pageUser.getPage(page, size);
    }

PDTA: como dicen algunos compañeros, no me fue necesario cambiar la herencia de JpaRepository a PagingAndSortingRepository. Entonces ese paso me lo salte. ❤️

La diferencia entre CrudRepository JpaRepository PagingAndSortingRepository

https://programmerclick.com/article/47381325017/

Para los que quieren implementar el metodo desde la capa de servicio y no directamente del repositorio:
En userService agregan este metodo:

public List<User> findAll(PageRequest of) {
       return userRepository.findAll(of).getContent();
    }

Y en el UserRestController:

 @GetMapping("/pageable")
    public List<User> getUserPageable(@RequestParam int page, @RequestParam int size) {
        return userService.findAll(PageRequest.of(page, size));
    }

Pd: En el repositorio, no hace falta cambiar JpaRepository, ya que esta ya hereda de la interfaz Paging

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>