Spring 引导分页 - PagingAndSortingRepository 未返回任何结果
Spring Boot Pagination - PagingAndSortingRepository not returning any results
我在 Spring 引导中创建了一个 PagingAndSortingRepository,但它没有 return 任何结果(认为它应该)。
存储库:
@Repository
public interface DoctorPagingRepository extends PagingAndSortingRepository<Doctor, Integer> {
Page<Doctor> findByName(String name, Pageable pageable);
Page<Doctor> findAllByUsername(String username, Pageable pageable);
Page<Doctor> findAllByName(String name, Pageable pageable);
Page<Doctor> findAllByNameContaining(String name, Pageable pageable);
}
当不使用 Pageable 方法时,我还有其他可用的存储库,即
@Repository
public interface UserPagingRepository extends PagingAndSortingRepository<User, Integer> {
User findByUsername(String username);
User findByEmail(String email);
}
但每当我尝试使用可分页存储库方法时,它确实有效:
@GetMapping("get-doctor/name/{name}/{pageNum}")
public JsonResponse findDoctorByFirstname(@PathVariable String name, @PathVariable String pageNum) {
//set page number and return up to 10 elements
Pageable page = PageRequest.of(Integer.parseInt(pageNum), 10);
//get list of users from that page
Page<Doctor> doctorPage = userServices.getDoctorPaging().findAllByNameContaining(name, page);
//set response object with users
DoctorListResponse res = new DoctorListResponse();
try {
doctorPage.getContent().forEach( u -> {
logger.trace(u.toString());
res.getDoctorJsons().add(new DoctorJson(u));
res.setSuccess(true);
});
} catch (Exception e) {
res.setSuccess(false);
}
res.setTotalPages(doctorPage.getTotalPages());
return res;
}
谁能看出这哪里出了问题?
原来问题出在PageRequest.of()
方法的第一个参数page
是'zero based page index',我没有意识到。因此,当 pageNum
设置为 1 时,它返回结果的第二页。第二页是空的,因为数据库中只有 5 个结果可以匹配我的查询将在第一页上(因为每个页面都设置为保留十个结果)。
解决方案只是从 pageNum
到 -1:
Pageable page = PageRequest.of(Integer.parseInt(pageNum)-1, 10);
我在 Spring 引导中创建了一个 PagingAndSortingRepository,但它没有 return 任何结果(认为它应该)。
存储库:
@Repository
public interface DoctorPagingRepository extends PagingAndSortingRepository<Doctor, Integer> {
Page<Doctor> findByName(String name, Pageable pageable);
Page<Doctor> findAllByUsername(String username, Pageable pageable);
Page<Doctor> findAllByName(String name, Pageable pageable);
Page<Doctor> findAllByNameContaining(String name, Pageable pageable);
}
当不使用 Pageable 方法时,我还有其他可用的存储库,即
@Repository
public interface UserPagingRepository extends PagingAndSortingRepository<User, Integer> {
User findByUsername(String username);
User findByEmail(String email);
}
但每当我尝试使用可分页存储库方法时,它确实有效:
@GetMapping("get-doctor/name/{name}/{pageNum}")
public JsonResponse findDoctorByFirstname(@PathVariable String name, @PathVariable String pageNum) {
//set page number and return up to 10 elements
Pageable page = PageRequest.of(Integer.parseInt(pageNum), 10);
//get list of users from that page
Page<Doctor> doctorPage = userServices.getDoctorPaging().findAllByNameContaining(name, page);
//set response object with users
DoctorListResponse res = new DoctorListResponse();
try {
doctorPage.getContent().forEach( u -> {
logger.trace(u.toString());
res.getDoctorJsons().add(new DoctorJson(u));
res.setSuccess(true);
});
} catch (Exception e) {
res.setSuccess(false);
}
res.setTotalPages(doctorPage.getTotalPages());
return res;
}
谁能看出这哪里出了问题?
原来问题出在PageRequest.of()
方法的第一个参数page
是'zero based page index',我没有意识到。因此,当 pageNum
设置为 1 时,它返回结果的第二页。第二页是空的,因为数据库中只有 5 个结果可以匹配我的查询将在第一页上(因为每个页面都设置为保留十个结果)。
解决方案只是从 pageNum
到 -1:
Pageable page = PageRequest.of(Integer.parseInt(pageNum)-1, 10);