在Spring JPA

时间:2017-10-22 11:26:21

标签: java spring spring-boot spring-data-jpa jpql

我有一个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>

0 个答案:

没有答案