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
Última atualização em: | 10952 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.