首页 > 解决方案 > 在 Spring JPA 存储库的 findByTopN 中动态设置 N

问题描述

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

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
  List<Employee> findTop3ByOrderBySalaryDesc();
}

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

标签: javaspringspring-data-jpa

解决方案


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

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    List<Employee> findAllByOrderBySalaryDesc(Pageable pageable);
}

然后您需要调用该方法,请求具有最多 N 个元素的第一页。例如查找前 100 个元素的第一页:

List<Employee> list = repo.findAllByOrderBySalaryDesc(PageRequest.of(0, 100));

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

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

看看这个教程:

限制查询结果

spring data jpa分页和排序


推荐阅读