我已经在Spring Boot中创建了一个PagingAndSortingRepository,但是它没有返回任何结果(认为它应该)。
存储库:
@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);
}
当不使用可分页方法时,我有其他可用的存储库,例如
@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
是'零基页面索引'有关,这是我没有意识到的。因此,当pageNum
被设置为1时,它正在返回结果的第二页。第二页是空的,因为数据库中只有5个结果可以匹配我在第一页上的查询(因为每个页面被设置为包含10个结果)。
解决方案是-1从pageNum
:
Pageable page = PageRequest.of(Integer.parseInt(pageNum)-1, 10);