Spring Data método exists por atributo

Este tutorial mostra como criar um método para verificar se existe determinado registro com base em um atributo

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Spring Framework - TUTORIAL

Última atualização em: | 10178 Visualizações

Antes de entrar no que diz respeito ao Spring Data, vamos entender a necessidade.

Para este exemplo, considere a tabela Blog com os seguintes campos:

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| nome          | varchar(255) | YES  |     | NULL    |                |
| image         | varchar(255) | YES  |     | NULL    |                |
| link          | varchar(255) | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

Considerando que queremos verificar se um registro existe na tabela, podemos utilizar a seguinte instrução SQL:

select count(*) from blog where id = ?

Isso nos retorna um valor inteiro que corresponde a quantidade de registros que tem no banco de dados que correspondem a clausula where.

Ou ainda poderiamos escrever assim para retornar true ou false:

select count(*) > 0 from blog where id = ?

Então, caso queira verificar com base em outra coluna, por exemplo a coluna nome basta alterarmos o SQL:

select count(*) > 0 from blog where nome = ?

Método exists do Spring Data

Ótimo, agora que entendemos o conceito, podemos aplicar a mesma ideia usando o Spring Data.

Para isso iniciamos com o mapenamento da Tabela Blog, veja:

import javax.persistence.*;
import javax.validation.constraints.*;

import java.io.Serializable;
import java.time.LocalDateTime;

import lombok.*;

@Entity
@Table(name="BLOG")
@Data
@EqualsAndHashCode(of = "id")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Blog implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    private String nome;

    private String link;

    private String image;

}

Note que utilizamos lombok para gerar os getters e setters. Caso queira saber mais acesse: Por que eu uso o Lombok

Com o devido mapeamento da classe, criaremos a interface para extender de CrudRepository:

import br.com.garbosoftware.news.model.Blog;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface BlogData extends CrudRepository<Blog, Long> {

}

Considerando que estamos verificando com base na coluna id (como no primeiro exemplo em SQL), já temos um método em CrudRepository do Spring Data que nós retorna true ou false, o método existsById. Para este caso poderiamos utilizar da seguinte forma:

[...]

public class BlogServiceImpl implements BlogService {
	
    @Autowired private BlogData data;

    public boolean verificarPorId( Long id ) {
        return data.existsById( id );
    }
}

Agora, partindo para o segundo exemplo, com base no campo nome, precisamos criar o método em BlogData, deixando nossa interface da seguinte forma:

[...]

public interface BlogData extends CrudRepository<Blog, Long> {

    boolean existsByNome(String nome);

}

Assim teremos o mesmo resultado que no comando:

select count(*) > 0 from blog where nome = ?

Retornando a partir deste método true caso o nome exista ou false caso não exista.

Referência:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#new-features.1-11-0

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!