2015-08-06 1 views
1

Comment puis-je implémenter un ressort de pagination?Tri, filtrage et pagination Reposant à l'aide du ressort

un conseil?

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; 
} 

Répondre

2

utilisation Pageable comme un paramètre de procédé et transmettre le paramètre à la méthode Repo/DAO. Il va automatiquement générer le paging et le tri SQL paginé sur les valeurs dans le Pageable. Voici l'exemple de code.

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); 

} 

Espérons que cela aide.