Spring Data JPA apply sorting, pagination along with a where clause

前端 未结 3 1505
春和景丽
春和景丽 2021-02-04 06:35

I am currently Using Spring JPA and utilizing the Sorting and Pagination as described here -

How to query data via Spring data JPA by sort and pageable both out of box?<

3条回答
  •  青春惊慌失措
    2021-02-04 07:30

    To fetch Spring Data JPA apply sorting, pagination along with a where clause check bellow codes

    1. Entity class

      @Entity
      @Table(name = "users")
      Public Class User{
          private String name;
          private Integer id;
          private String email;
          // add required setter getter//
      }
      
    2. Repository class

      @Repository("userRepository")
      @Transactional`
          public interface UserRepository extends JpaRepository{
      
          }
      
    3. Service layer to pass where clause using Example object and Pagination+Sorting together using Pagable and Sort Class. We will implement Pageable in controller to inject Sorting logic then will pass that Pagable object to service Layer.

       @Service
       Public class UserService{
          public Page getUserListPaginated(`EXAMPLE` searchTerm, Pageable pageable) {
              return userRepo.findAll(searchTerm,pageable);
          }
      }
      

    Example does not take the attribute if its value is null. for that I used Integer id in Entity class as I can set it's value null for first call

    1. Now Controller Class

      @Controller
      Public class UserController{
      
          @Autowired UserService userService;
          @GetMapping("/users")
          public String users(Model model,@RequestParam(value="page",defaultValue = "0") Integer  pageNumber, @SortDefault(sort = "name", direction = Sort.Direction.ASC) Sort sort){
              Pageable pageable = PageRequest.of(pageNumber,10, sort);
              Example searchTerm = Example.of(new User());
              Page userList = userService.getUserListPaginated(searchTerm, pageable);
      
      
          }
      }
      

提交回复
热议问题