Entender a parte de persistência de forma simples com CRUD utilizando Spring DATA e JPA, banco de dados relacional PostgreSQL e teste unitários com Junit.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class UsuarioSpringData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String login;
private String senha;
private String nome;
private String email;
private int idade;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
}
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ={"classpath:META-INF/spring-config.xml"})
public class AppSpringDataTest {
@Test
public void testeCriacao() {
System.out.println("iniciou Spring com Sucesso");
}
}
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import estudoSpringData.estudoSpringData.model.UsuarioSpringData;
@Repository
public interface InterfaceSpringDataUser extends CrudRepository<UsuarioSpringData, Long> {
}
Fazendo a injeção de dependência da classe InterfaceSpringDataUser na classe de teste.
@Autowired
private InterfaceSpringDataUser interfaceSpringDataUser;
Realizando cadastro no banco de dados.
@Test
public void testeInsert() {
UsuarioSpringData usuarioSpringData = new UsuarioSpringData();
usuarioSpringData.setNome("José");
usuarioSpringData.setEmail("[email protected]");
usuarioSpringData.setIdade(18);
usuarioSpringData.setLogin("@123");
usuarioSpringData.setSenha("123");
interfaceSpringDataUse.save(usuarioSpringData);
}
@Test
public void testeConsulta() {
Optional<UsuarioSpringData> usuarioSpringData = interfaceSpringDataUse.findById(2L);
System.out.println(usuarioSpringData.get().getId());
System.out.println(usuarioSpringData.get().getEmail());
System.out.println(usuarioSpringData.get().getNome());
System.out.println(usuarioSpringData.get().getIdade());
System.out.println(usuarioSpringData.get().getLogin());
System.out.println(usuarioSpringData.get().getSenha());
}
@Test
public void testeConsultaTodos() {
Iterable<UsuarioSpringData> lista = interfaceSpringDataUse.findAll();
for (UsuarioSpringData usuarioSpringData : lista) {
System.out.println(usuarioSpringData.getId());
System.out.println(usuarioSpringData.getEmail());
System.out.println(usuarioSpringData.getNome());
System.out.println(usuarioSpringData.getIdade());
System.out.println(usuarioSpringData.getLogin());
System.out.println(usuarioSpringData.getSenha());
System.out.println("-----------------------------------------");
}
}
Realizando Update de cadastro do Id (3).
@Test
public void testeUpdate() {
Optional<UsuarioSpringData> usuarioSpringData = interfaceSpringDataUse.findById(3L);
UsuarioSpringData data = usuarioSpringData.get();
data.setEmail("[email protected]");
data.setNome("Blablu");
interfaceSpringDataUse.save(data);
}
Deletando o Id(1) da tabela registro.
@Test
public void testeDelete() {
Optional<UsuarioSpringData> usuarioSpringData = interfaceSpringDataUse.findById(1L);
interfaceSpringDataUse.delete(usuarioSpringData.get());
}
Realizando consultas customizadas com @Query.
@Repository
public interface InterfaceSpringDataUser extends CrudRepository<UsuarioSpringData, Long> {
@Query(value = "select p from UsuarioSpringData p where p.nome like %?1%")
public List<UsuarioSpringData> buscarPorNome(String nome);
}
@Test
public void testeConsultaNome() {
List<UsuarioSpringData> list = interfaceSpringDataUse.buscarPorNome("joão");
for (UsuarioSpringData usuarioSpringData : list) {
System.out.println(usuarioSpringData.getId());
System.out.println(usuarioSpringData.getEmail());
System.out.println(usuarioSpringData.getNome());
System.out.println(usuarioSpringData.getIdade());
System.out.println(usuarioSpringData.getLogin());
System.out.println(usuarioSpringData.getSenha());
System.out.println("-----------------------------------------");
}
}
Realizando Delete condicional.
@Modifying
@Transactional
@Query("delete from UsuarioSpringData u where u.nome = ?1")
public void deletePorNome(String nome);
@Test
public void testeDeletePorNome() {
interfaceSpringDataUse.deletePorNome("joão");
}
@Modifying
@Transactional
@Query("update UsuarioSpringData u set u.email = ?1 where u.nome =?2")
public void updatePorEmail(String email, String nome);
@Test
public void testeUpdatePorEmail() {
interfaceSpringDataUse.updatePorEmail("[email protected]","joão");
}
Criando a tabela de telefone e aplicando o conceito de muitos para um e relacionando.
@Entity
public class Telefone {
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
private Long id;
private String tipo;
private String numero;
@ManyToOne
private UsuarioSpringData usuarioSpringData;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public UsuarioSpringData getUsuarioSpringData() {
return usuarioSpringData;
}
public void setUsuarioSpringData(UsuarioSpringData usuarioSpringData) {
this.usuarioSpringData = usuarioSpringData;
}
}
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import estudoSpringData.estudoSpringData.model.UsuarioSpringData;
@Repository
public interface Telefone extends CrudRepository<Telefone, Long>{
}
Fazendo a injeção de dependência da classe InterfaceTelefone na classe de teste.
@Autowired
private InterfaceTelefone interfaceTelefone;
Realizando cadastro no banco de dados.
@Test
public void testeInsertTelefone() {
Optional<UsuarioSpringData> usuarioSpringData = interfaceSpringDataUse.findById(3L);
Telefone telefone = new Telefone();
telefone.setTipo("Celular");
telefone.setNumero("1998454729");
telefone.setUsuarioSpringData(usuarioSpringData.get());
interfaceTelefone.save(telefone);
}
Criando um relacionamento e usando conceito de muitos para um na classe UsuarioSpringData.
@OneToMany(mappedBy = "usuarioSpringData", orphanRemoval = true, fetch = FetchType.EAGER)
private List<Telefone> telefones;
public List<Telefone> getTelefones() {
return telefones;
}
public void setTelefones(List<Telefone> telefones) {
this.telefones = telefones;
}
Download do projeto para testar em sua máquina: https://github.com/AugustoMello09/Spring-Date-e-JPA/archive/refs/heads/main.zip