我有一个Spring Boot 1.5.2项目,到目前为止一直将列表发送回视图。 我想使用分页而不是列表。我开始更改服务层和存储库中的代码,但从List<T>
更改为Page<T>
并不是一个简单的例子。
特别是在服务层上,我根据用户角色返回了不同的List<T>
,然后将此列表传递给转换为Dto的方法,然后再将其发送回控制器。
Spring Boot 1.5.2似乎使用Spring-data-jpa:1.11
控制器
@GetMapping("/dashboard/sale")
public String dashboard(@RequestParam(name = "p", defaultValue = "1") int pageNumber, Model model, HttpServletRequest request) {
List<SaleDashboard> listSaleDashboard = saleService.getPage(pageNumber);
model.addAttribute("listSaleDashboard", listSaleDashboard);
return "dashboard";
}
服务层
public List<SaleDashboard> getPage(int pageNumber) {
PageRequest request = new PageRequest(pageNumber - 1, PAGESIZE, Sort.Direction.ASC, "id");
List<Sale> listSale = new ArrayList<>();
if (roles.contains("ROLE_ADMIN")) {
listSale = saleRepository.findBySomeProperty(user.getUserDetails().getReportDept());
}
if (roles.contains("ROLE_USER")) {
listSale = saleRepository.findByListOfCreatingUser(userList);
}
List<SaleDashboard> listSaleDashboard = createSaleDashboard(listSale);
return listSaleDashboard;
}
public List<SaleDashboard> createSaleDashboard(List<Sale> sales) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
List<SaleDashboard> listSaleDashboard = new ArrayList<>();
for (Sale sale: sales) {
SaleDashboard saleDashboard = new SaleDashboard();
saleDashboard.setSaleId(sale.getId());
// ETC
listSaleDashboard.add(saleDashboard);
}
return listSaleDashboard;
}
在上面的服务层,我开始使用PageRequest,但就我而言。
存储库
public interface SaleRepository extends JpaRepository<Sale, Long> , PagingAndSortingRepository<Sale, Long> {
@Query("SELECT e FROM Sale e WHERE e.creatingUser in (:userList)")
Page<Sale> findByListOfCreatingUser(@Param("userList") List<User> users, Pageable pageable);
}
我如何实施类似的服务层,但使用Page<T>
代替List<T>
?