{"id":24033329,"url":"https://github.com/augustomello09/spring-data-e-jpa","last_synced_at":"2026-05-08T04:36:03.707Z","repository":{"id":154662524,"uuid":"559616520","full_name":"AugustoMello09/Spring-Data-e-JPA","owner":"AugustoMello09","description":"Praticar 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.","archived":false,"fork":false,"pushed_at":"2023-01-10T12:25:06.000Z","size":32,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-20T09:07:32.703Z","etag":null,"topics":["hibernate","java","junit4","maven","postgresql","spring-data-jpa"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AugustoMello09.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-30T17:04:40.000Z","updated_at":"2022-12-15T00:58:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"7bffaf5b-1550-444c-bba3-25d7a8bde5ee","html_url":"https://github.com/AugustoMello09/Spring-Data-e-JPA","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AugustoMello09/Spring-Data-e-JPA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AugustoMello09%2FSpring-Data-e-JPA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AugustoMello09%2FSpring-Data-e-JPA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AugustoMello09%2FSpring-Data-e-JPA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AugustoMello09%2FSpring-Data-e-JPA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AugustoMello09","download_url":"https://codeload.github.com/AugustoMello09/Spring-Data-e-JPA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AugustoMello09%2FSpring-Data-e-JPA/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260915901,"owners_count":23082040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hibernate","java","junit4","maven","postgresql","spring-data-jpa"],"created_at":"2025-01-08T18:15:47.806Z","updated_at":"2026-05-08T04:35:58.684Z","avatar_url":"https://github.com/AugustoMello09.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Data e JPA\n\n#### Objetivo do repositório\n\nEntender a parte de persistência de forma simples com\nCRUD utilizando Spring DATA e JPA, banco de dados relacional PostgreSQL e teste unitários com Junit.\n\n### Criando uma Entidade\n~~~JAVA\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Id;\n\n@Entity\npublic class UsuarioSpringData {\n\n\t@Id\n\t@GeneratedValue(strategy = GenerationType.AUTO)\n\tprivate long id;\n\n\n\tprivate String login;\n\n\tprivate String senha;\n\n\tprivate String nome;\n\n\tprivate String email;\n\n\tprivate int idade;\n\n\tpublic long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getLogin() {\n\t\treturn login;\n\t}\n\n\tpublic void setLogin(String login) {\n\t\tthis.login = login;\n\t}\n\n\tpublic String getSenha() {\n\t\treturn senha;\n\t}\n\n\tpublic void setSenha(String senha) {\n\t\tthis.senha = senha;\n\t}\n\n\tpublic String getNome() {\n\t\treturn nome;\n\t}\n\n\tpublic void setNome(String nome) {\n\t\tthis.nome = nome;\n\t}\n\n\tpublic String getEmail() {\n\t\treturn email;\n\t}\n\n\tpublic void setEmail(String email) {\n\t\tthis.email = email;\n\t}\n\n\tpublic int getIdade() {\n\t\treturn idade;\n\t}\n\n\tpublic void setIdade(int idade) {\n\t\tthis.idade = idade;\n\t}\n\n}\n~~~\n#### Testando a criação de Tabela no Banco\n\n~~~ JAVA\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(locations ={\"classpath:META-INF/spring-config.xml\"})\npublic class AppSpringDataTest {\n\n    @Test\n    public void testeCriacao() {\n        System.out.println(\"iniciou Spring com Sucesso\");\n    }\n}\n~~~\n![Criando o Banco](https://user-images.githubusercontent.com/101072311/198855857-f00146ec-93a4-4ea2-a594-34a92ee05057.png)\n#### Criando o Repository\n~~~JAVA\nimport org.springframework.data.repository.CrudRepository;\nimport org.springframework.stereotype.Repository;\nimport estudoSpringData.estudoSpringData.model.UsuarioSpringData;\n\n@Repository\npublic interface InterfaceSpringDataUser extends CrudRepository\u003cUsuarioSpringData, Long\u003e {\n\n}\n~~~\n\n#### Instanciando a dependência\n Fazendo a injeção de dependência da classe InterfaceSpringDataUser na classe de teste.\n\n ~~~JAVA\n@Autowired\nprivate InterfaceSpringDataUser interfaceSpringDataUser;\n ~~~\n## CRUD\n\n#### INSERT\nRealizando cadastro no banco de dados.\n~~~JAVA\n@Test\n\tpublic void testeInsert() {\n\n\t\tUsuarioSpringData usuarioSpringData = new UsuarioSpringData();\n\t\tusuarioSpringData.setNome(\"José\");\n\t\tusuarioSpringData.setEmail(\"example@gmail.com\");\n\t\tusuarioSpringData.setIdade(18);\n\t\tusuarioSpringData.setLogin(\"@123\");\n\t\tusuarioSpringData.setSenha(\"123\");\n\n\t\tinterfaceSpringDataUse.save(usuarioSpringData);\n\t}\n~~~\n![Insert na tabela](https://user-images.githubusercontent.com/101072311/198856153-37f97fce-fc3e-4ac6-be7d-509479675aea.png)\n#### Consultando registro por Id\n\n~~~JAVA\n@Test\n\tpublic void testeConsulta() {\n\t\tOptional\u003cUsuarioSpringData\u003e usuarioSpringData = interfaceSpringDataUse.findById(2L);\n\n\t\tSystem.out.println(usuarioSpringData.get().getId());\n\t\tSystem.out.println(usuarioSpringData.get().getEmail());\n\t\tSystem.out.println(usuarioSpringData.get().getNome());\n\t\tSystem.out.println(usuarioSpringData.get().getIdade());\n\t\tSystem.out.println(usuarioSpringData.get().getLogin());\n\t\tSystem.out.println(usuarioSpringData.get().getSenha());\n\t}\n~~~\n\n#### Consultando todos os registro no banco\n\n~~~JAVA\n@Test\n\tpublic void testeConsultaTodos() {\n\t\t\tIterable\u003cUsuarioSpringData\u003e lista = interfaceSpringDataUse.findAll();\n\n\t\t\tfor (UsuarioSpringData usuarioSpringData : lista) {\n\t\t\t\tSystem.out.println(usuarioSpringData.getId());\n\t\t\t\tSystem.out.println(usuarioSpringData.getEmail());\n\t\t\t\tSystem.out.println(usuarioSpringData.getNome());\n\t\t\t\tSystem.out.println(usuarioSpringData.getIdade());\n\t\t\t\tSystem.out.println(usuarioSpringData.getLogin());\n\t\t\t\tSystem.out.println(usuarioSpringData.getSenha());\n\t\t\t\tSystem.out.println(\"-----------------------------------------\");\n\t\t\t}\n\t}\n~~~\n\n#### UPDATE de cadastro\nRealizando Update de cadastro do Id (3).\n\n![Tabela com todos os usuários](https://user-images.githubusercontent.com/101072311/198857545-475e744a-0a7f-4d68-b674-14b6119aad12.png)\n\n~~~JAVA\n@Test\n\tpublic void testeUpdate() {\n\t\tOptional\u003cUsuarioSpringData\u003e usuarioSpringData = interfaceSpringDataUse.findById(3L);\n\n\t\tUsuarioSpringData data = usuarioSpringData.get();\n\n\t\tdata.setEmail(\"example3@gmail.com\");\n\t\tdata.setNome(\"Blablu\");\n\n\t\tinterfaceSpringDataUse.save(data);\n\n\t}\n~~~\n![Tabela com Alteração](https://user-images.githubusercontent.com/101072311/198857761-affaa87c-61f1-4c96-ade9-e8aa2a727d84.png)\n\n#### DELETE de registros\nDeletando o Id(1) da tabela registro.\n\n![Tabela com todos os usuários](https://user-images.githubusercontent.com/101072311/198857545-475e744a-0a7f-4d68-b674-14b6119aad12.png)\n\n~~~JAVA\n@Test\n\tpublic void testeDelete() {\n\t\tOptional\u003cUsuarioSpringData\u003e usuarioSpringData = interfaceSpringDataUse.findById(1L);\n\n\t\tinterfaceSpringDataUse.delete(usuarioSpringData.get());\n\n\t}\n~~~\n![Tabela com Usuário Deletado](https://user-images.githubusercontent.com/101072311/198857916-d1b41b0e-b68a-448a-b63f-620f699e50ee.png)\n\n#### Consulta no banco\nRealizando consultas customizadas com @Query.\n~~~JAVA\n@Repository\npublic interface InterfaceSpringDataUser extends CrudRepository\u003cUsuarioSpringData, Long\u003e {\n\n\t@Query(value = \"select p from UsuarioSpringData p where p.nome like %?1%\")\n\tpublic List\u003cUsuarioSpringData\u003e buscarPorNome(String nome);\n}\n~~~\n\n~~~JAVA\n@Test\n\tpublic void testeConsultaNome() {\n\t\tList\u003cUsuarioSpringData\u003e list = interfaceSpringDataUse.buscarPorNome(\"joão\");\n\n\t\tfor (UsuarioSpringData usuarioSpringData : list) {\n\t\t\tSystem.out.println(usuarioSpringData.getId());\n\t\t\tSystem.out.println(usuarioSpringData.getEmail());\n\t\t\tSystem.out.println(usuarioSpringData.getNome());\n\t\t\tSystem.out.println(usuarioSpringData.getIdade());\n\t\t\tSystem.out.println(usuarioSpringData.getLogin());\n\t\t\tSystem.out.println(usuarioSpringData.getSenha());\n\t\t\tSystem.out.println(\"-----------------------------------------\");\n\t\t}\n\n\t}\n~~~\n\n#### DELETE por nome\nRealizando Delete condicional.\n\n![Tabela com Usuário Deletado](https://user-images.githubusercontent.com/101072311/198857916-d1b41b0e-b68a-448a-b63f-620f699e50ee.png)\n\n~~~JAVA\n@Modifying\n\t@Transactional\n\t@Query(\"delete from UsuarioSpringData u where u.nome = ?1\")\n\tpublic void deletePorNome(String nome);\n~~~\n\n~~~JAVA\n@Test\n\tpublic void testeDeletePorNome() {\n\t\tinterfaceSpringDataUse.deletePorNome(\"joão\");\n\t}\n~~~\n![delete por nome](https://user-images.githubusercontent.com/101072311/198883488-154cb129-03ad-4233-bd9d-9a1bb8fc1e12.png)\n\n#### UPDATE condicional\n![joão email](https://user-images.githubusercontent.com/101072311/198885005-74eea2f5-26e1-4530-810e-80822e1e5e18.png)\n~~~JAVA\n@Modifying\n\t@Transactional\n\t@Query(\"update UsuarioSpringData u set u.email = ?1 where u.nome =?2\")\n\tpublic void updatePorEmail(String email, String nome);\n~~~\n\n~~~JAVA\n@Test\n\tpublic void testeUpdatePorEmail() {\n\t\tinterfaceSpringDataUse.updatePorEmail(\"example2UPDATE@gmail.com\",\"joão\");\n\t}\n~~~\n![joão Update](https://user-images.githubusercontent.com/101072311/198885019-8ca15efd-f8c7-4e24-8d10-e661b75e1520.png)\n\n#### Criando e salvando objetos relacionados\n\nCriando a tabela de telefone e aplicando o conceito de muitos para um e relacionando.\n\n~~~JAVA\n@Entity\npublic class Telefone {\n\n\t@Id\n\t@GeneratedValue (strategy = GenerationType.AUTO)\n\tprivate Long id;\n\n\tprivate String tipo;\n\n\tprivate String numero;\n\n\t@ManyToOne\n\tprivate UsuarioSpringData usuarioSpringData;\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getTipo() {\n\t\treturn tipo;\n\t}\n\n\tpublic void setTipo(String tipo) {\n\t\tthis.tipo = tipo;\n\t}\n\n\tpublic String getNumero() {\n\t\treturn numero;\n\t}\n\n\tpublic void setNumero(String numero) {\n\t\tthis.numero = numero;\n\t}\n\n\tpublic UsuarioSpringData getUsuarioSpringData() {\n\t\treturn usuarioSpringData;\n\t}\n\n\tpublic void setUsuarioSpringData(UsuarioSpringData usuarioSpringData) {\n\t\tthis.usuarioSpringData = usuarioSpringData;\n\t}\n\n}\n~~~\n![telefone](https://user-images.githubusercontent.com/101072311/198886498-ff811cfe-a0c4-41e4-ab2e-894cb25a60c2.png)\n\n#### Criando o Repository telefone\n~~~JAVA\nimport org.springframework.data.repository.CrudRepository;\nimport org.springframework.stereotype.Repository;\nimport estudoSpringData.estudoSpringData.model.UsuarioSpringData;\n\n@Repository\npublic interface Telefone extends CrudRepository\u003cTelefone, Long\u003e{\n\n}\n~~~\n\n#### Instanciando a dependência\n Fazendo a injeção de dependência da classe InterfaceTelefone na classe de teste.\n\n~~~JAVA\n@Autowired\n\tprivate InterfaceTelefone interfaceTelefone;\n~~~\n\n#### INSERT na tabela Telefone\nRealizando cadastro no banco de dados.\n\n![telefone vazio](https://user-images.githubusercontent.com/101072311/198890109-15576f7f-d381-4eb2-8dd1-c53c594370a4.png)\n\n~~~JAVA\n@Test\n\tpublic void testeInsertTelefone() {\n\n\t\tOptional\u003cUsuarioSpringData\u003e usuarioSpringData = interfaceSpringDataUse.findById(3L);\n\n\t\tTelefone telefone = new Telefone();\n\t\ttelefone.setTipo(\"Celular\");\n\t\ttelefone.setNumero(\"1998454729\");\n\t\ttelefone.setUsuarioSpringData(usuarioSpringData.get());\n\n\t\tinterfaceTelefone.save(telefone);\n\n\t}\n~~~\n![telefone setado](https://user-images.githubusercontent.com/101072311/198890114-cbb9d36a-d1f1-425d-8263-809d3f402481.png)\n\n#### Relacionado a tabela de usuários com os telefones\n\nCriando um relacionamento e usando conceito de muitos para um na classe UsuarioSpringData.\n\n~~~JAVA\n@OneToMany(mappedBy = \"usuarioSpringData\", orphanRemoval = true, fetch = FetchType.EAGER)\n\tprivate List\u003cTelefone\u003e telefones;\n\n\tpublic List\u003cTelefone\u003e getTelefones() {\n\t\treturn telefones;\n\t}\n\n\tpublic void setTelefones(List\u003cTelefone\u003e telefones) {\n\t\tthis.telefones = telefones;\n\t}\n~~~\n\n## Ferramentas e Tecnologias usadas nesse repositório 🌐\n\u003cdiv style=\"display: inline_block\"\u003e\u003cbr\u003e\n\n\u003cimg align=\"center\" alt=\"Augusto-Java\" height=\"60\" width=\"60\" src=https://github.com/devicons/devicon/blob/master/icons/java/java-original.svg \u003e\n\u003cimg align=\"center\" alt=\"Augusto-SpringBoot\" height=\"60\" width=\"60\" src=\"https://raw.githubusercontent.com/devicons/devicon/1119b9f84c0290e0f0b38982099a2bd027a48bf1/icons/spring/spring-original-wordmark.svg\"\u003e\n\u003cimg align=\"center\" alt=\"Augusto-POSTGRESQL\" height=\"60\" width=\"60\" src=\"https://raw.githubusercontent.com/devicons/devicon/1119b9f84c0290e0f0b38982099a2bd027a48bf1/icons/postgresql/postgresql-original-wordmark.svg\"\u003e\n\u003cimg align=\"center\" alt=\"Augusto-Junit\" height=\"60\" width=\"60\" src=\"https://github.com/junit-team/junit5/blob/86465f4f491219ad0c0cf9c64eddca7b0edeb86f/assets/img/junit5-logo.svg\"\u003e\n\n\u003c/div\u003e    \n\n## Teste o projeto 👁‍🗨\n\nDownload do projeto para testar em sua máquina: https://github.com/AugustoMello09/Spring-Date-e-JPA/archive/refs/heads/main.zip\n\n## Entre em contato comigo através dos canais abaixo e desde já, agradeço a atenção. 🤝\n\n\u003cdiv\u003e\n\n \n  \u003ca href=\"https://www.linkedin.com/in/jos%C3%A9-augusto-mello-794a94234\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/-LinkedIn-%230077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n  \u003ca href=\"mailto:joseaugusto.Mello01@gmail.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n\n  \u003c/div\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugustomello09%2Fspring-data-e-jpa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faugustomello09%2Fspring-data-e-jpa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faugustomello09%2Fspring-data-e-jpa/lists"}