Classificando resultados de consulta com dados do Spring

Classificando resultados de consulta com dados do Spring

1. Introdução

Neste tutorial, vamoslearn how to sort query results comSpring Data.

Primeiro, vamos dar uma olhada no esquema dos dados que deseja consultar e classificar.

E então, vamos nos aprofundar em como obter esses dados Spring.

Vamos começar!

2. Os dados de teste

Abaixo, temos alguns dados de exemplo. Embora tenhamos representado aqui como uma tabela, poderíamos usar qualquer um dos bancos de dados suportados pelo Spring Data para persistir.

A pergunta que queremos responder é: "Quem está ocupando qual assento da companhia aérea?" mas, para tornar isso mais fácil de usar, queremos classificar por número de assento.

Primeiro nome

Último nome

Número do assento

Jill

Smith

50

Eve

Jackson

94

Fred

Bloggs

22

Ricki

Bobbie

36

Siya

Kolisi

85

3. Domínio

Para criar umSpring Data Repository, precisamos fornecer uma classe de domínio, bem como um tipo de id.

Aqui, modelamos nosso passageiro como uma entidade JPA, mas poderíamos facilmente tê-lo modelado como um documento MongoDB ou qualquer outra abstração de modelo:

@Entity
class Passenger {

    @Id
    @GeneratedValue
    @Column(nullable = false)
    private Long id;

    @Basic(optional = false)
    @Column(nullable = false)
    private String firstName;

    @Basic(optional = false)
    @Column(nullable = false)
    private String lastName;

    @Basic(optional = false)
    @Column(nullable = false)
    private int seatNumber;

    // constructor, getters etc.
}

4. Classificação com dados do Spring

Temos algumas opções diferentes à nossa disposição para classificar com o Spring Data.

4.1. Classificando com a palavra-chave do métodoOrderBy

Uma opção seria usar a derivação do método Spring Data, em que a consulta é gerada a partir do nome do método e assinatura.

All we need to do here to sort our data is include the keyword OrderBy in our method name junto com o (s) nome (s) da propriedade e a direção (Asc ou Dsc) pela qual queremos classificar.

Podemos usar esta convenção para criar uma consulta que retorne nossos passageiros em ordem crescente por número de assento:

interface PassengerRepository extends JpaRepository {

    List findByOrderBySeatNumberAsc();
}

Também podemos combinar essa palavra-chave com todos os nomes de métodos padrão do Spring Data.

Vejamos um exemplo de método que encontra passageiros pelo sobrenomeand pedidos por número do assento:

List findByLastNameOrderBySeatNumberAsc(String lastName);

4.2. Classificando com um parâmetroSort

Our second option is to include a Sort parameter especificando os nomes das propriedades e a direção pela qual queremos classificar:

List passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));

Nesse caso, estamos usando o métodofindAll()e adicionando a opçãoSort ao chamá-lo.

Também podemos adicionar esse parâmetro a uma nova definição de método:

List findByLastName(String lastName, Sort sort);

Finalmente, se talvez estejamos paginando, podemos especificar nossa classificação em um objetoPageable:

Page page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));

5. Conclusão

Temos duas opções fáceis para classificar dados com Spring Data por meio da derivação do método usando a palavra-chaveOrderBy ou usando o objetoSort como um parâmetro do método.

Como sempre, você pode encontrar o códigoover on GitHub.