在Spring JPA存储库中的findByTopN中动态设置N

Ham*_*med 1 java spring spring-data-jpa

我有一个Spring Boot应用程序,它具有这样的存储库。

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
  List<Employee> findTop3ByOrderBySalaryDesc();
}
Run Code Online (Sandbox Code Playgroud)

findTop3ByOrderBySalaryDesc在上面的功能中,找到薪水最高的前3名员工。在此示例中,是否可以动态指定雇员人数?例如,是否可以为此函数分配一个整数参数来确定员工人数?

Ari*_*era 6

您可以将Pageable对象用作参数,而不是“ Top”关键字。例如

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    List<Employee> findAllByOrderBySalaryDesc(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要调用该方法,并请求一个最多包含N个元素的首页。例如,找到前100个元素的首页:

List<Employee> list = repo.findAllByOrderBySalaryDesc(PageRequest.of(0, 100));
Run Code Online (Sandbox Code Playgroud)

您也可以使用“ findAll”方法并在调用期间指定自定义顺序:例如

List<Employee> list = repo.findAll(PageRequest.of(0, 100, Sort.by(Sort.Direction.DESC, "salary")));
Run Code Online (Sandbox Code Playgroud)

看一下这些教程:

限制查询结果

Spring数据JPA分页和排序