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 鈥淧ageUser鈥 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>