Spring Data JPA应用排序,分页以及where子句

时间:2013-01-02 10:10:42

标签: java spring jpa spring-data-jpa

我目前正在使用Spring JPA并使用此处所述的排序和分页 -

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

现在我的问题是如何在这里应用'where'子句?

E.g。

where PRODUCT_NAME='abc';

3 个答案:

答案 0 :(得分:26)

只需在存储库界面中创建一个查询方法即可。

查看文档here

使用paging和where子句添加查询方法。

Page<User> findByLastname(String lastname, Pageable pageable);

因此,您可以通过属性“lastname”找到User并配置分页设置。

答案 1 :(得分:4)

我能找到的最简单方法是use QueryDSL or Specifications。我更喜欢QueryDSL。

答案 2 :(得分:1)

要获取Spring Data JPA,请应用排序,分页以及where子句检查下面的代码

  1. 实体类

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

    @Repository("userRepository")
    @Transactional`
        public interface UserRepository extends JpaRepository<User, Integer>{
    
        }
    
  3. 服务层将使用Example对象的where子句与使用Pagable和Sort Class的Pagination + Sorting一起传递。我们将在控制器中实现Pageable,以注入Sorting逻辑,然后将该Pagable对象传递给服务Layer。

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

Example<T>如果该属性的值为null,则不采用该属性。 为此,我在Entity类中使用了Integer id,因为我可以为首次调用将其值设置为null

  1. 现在的控制器类

    @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<User> searchTerm = Example.of(new User());
            Page<User> userList = userService.getUserListPaginated(searchTerm, pageable);
    
    
        }
    }