Сортировка, фильтрация и пейджинг Restful с использованием Spring

как я могу реализовать разбиение на страницы с помощью Spring?

какой-то совет?

public class ClienteServiceImpl implements ClienteService {

public List<Cliente> findAllClientes(final String ragioneSociale, final String partitaIva, String sortBy, String sortOrder, Integer startResult, Integer maxRows) {

    Sort sort = null;
    Specification<Cliente> specification = null;

    if(sortBy != null){
        // sorting
        sort = new Sort(Direction.fromString(sortOrder), sortBy);
    }

    if(ragioneSociale != null || partitaIva != null){
        // filtering
        specification = new Specification<Cliente>() {
            public Predicate toPredicate(Root<Cliente> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Predicate p1 =  ragioneSociale != null ? cb.like(root.<String>get("ragioneSociale"), ragioneSociale + "%") : cb.isNotNull(root.<Long>get("id"));
                Predicate p2 =  partitaIva != null ? cb.like(root.<String>get("partitaIva"), partitaIva + "%") : cb.isNotNull(root.<Long>get("id"));
                return cb.and(p1,p2);
            }
        };
    }

    List<Cliente> clientes = new ArrayList<Cliente>();
    if(sort == null && specification == null) clientes = clienteDAO.findAll();
    else if(sort != null && specification == null) clientes = clienteDAO.findAll(sort);
    else if(sort == null && specification != null) clientes = clienteDAO.findAll(specification);
    else if(sort != null && specification != null) clientes = clienteDAO.findAll(specification, sort);



    return clientes;
}

person Silvio Troia    schedule 06.08.2015    source источник


Ответы (1)


Используйте Pageable в качестве параметра метода и передайте параметр методу Repo/DAO. Он автоматически сгенерирует SQL-запрос на разбиение по страницам и сортировку по значениям в файле Pageable. Ниже приведен пример кода.

public List<Cliente> findAllClientes(final String ragioneSociale, final String partitaIva, Pageable pageable) {
    clienteDAO.findByExample(ragioneSociale, partitaIva, pageable);
}

@Repository
public interface ClienteRepository extends JpaRepository<Cliente, Long> {

    @Query("from Cliente c where c.ragioneSociale=:ragioneSociale AND c.partitaIva=:partitaIva")
    Page<Cliente> findByExample(@Param("ragioneSociale") String ragioneSociale, @Param("partitaIva") String partitaIva, Pageable page);

}

Надеюсь это поможет.

person Nitin Arora    schedule 06.08.2015