O que é JPA?
Primavera de inicialização JPA é uma especificação Java para gerenciar relacional dados em aplicativos Java. Ele nos permite acessar e persistir dados entre objeto/classe Java e banco de dados relacional. JPA segue Mapeamento de relação de objeto (ORM). É um conjunto de interfaces. Ele também fornece um tempo de execução EntityManager API para processar consultas e transações nos objetos no banco de dados. Ele usa uma linguagem de consulta orientada a objetos independente de plataforma JPQL (Java Persistent Query Language).
No contexto da persistência, abrange três áreas:
- A API de persistência Java
- A própria API, definida no persistência pacote
JPA não é uma estrutura. Ele define um conceito que pode ser implementado por qualquer framework.
Por que devemos usar JPA?
JPA é mais simples, mais limpo e menos trabalhoso que JDBC, SQL e mapeamento escrito à mão. JPA é adequado para aplicativos complexos não orientados ao desempenho. A principal vantagem do JPA sobre o JDBC é que, no JPA, os dados são representados por objetos e classes, enquanto no JDBC os dados são representados por tabelas e registros. Ele usa POJO para representar dados persistentes que simplificam a programação do banco de dados. Existem algumas outras vantagens do JPA:
- JPA evita escrever DDL em um dialeto SQL específico do banco de dados. Em vez disso, permite mapeamento em XML ou utilização de anotações Java.
- JPA nos permite evitar escrever DML no dialeto SQL específico do banco de dados.
- JPA nos permite salvar e carregar objetos e gráficos Java sem qualquer linguagem DML.
- Quando precisamos realizar consultas JPQL, ele nos permite expressar as consultas em termos de entidades Java em vez de tabelas e colunas SQL (nativas).
Recursos JPA
Existem os seguintes recursos do JPA:
- É um repositório poderoso e personalizado abstração de mapeamento de objetos.
- Ele suporta para persistência entre lojas . Isso significa que uma entidade pode ser parcialmente armazenada em MySQL e Neo4j (Graph Database Management System).
- Ele gera consultas dinamicamente a partir do nome dos métodos de consulta.
- As classes base de domínio fornecem propriedades básicas.
- Suporta auditoria transparente.
- Possibilidade de integrar código de repositório personalizado.
- É fácil integrar-se ao Spring Framework com o namespace personalizado.
Arquitetura JPA
JPA é uma fonte para armazenar entidades comerciais como entidades relacionais. Mostra como definir um POJO como uma entidade e como gerenciar entidades com relação.
A figura a seguir descreve a arquitetura em nível de classe do JPA que descreve as principais classes e interfaces do JPA definidas no arquivo persistência javax pacote. A arquitetura JPA contém as seguintes unidades:
Relacionamentos de classe JPA
As classes e interfaces que discutimos acima mantêm um relacionamento. A figura a seguir mostra o relacionamento entre classes e interfaces.
- O relacionamento entre EntityManager e EntiyTransaction é um a um . Há uma instância EntityTransaction para cada operação EntityManager.
- O relacionamento entre EntityManageFactory e EntiyManager é um para muitos . É uma classe de fábrica para instância do EntityManager.
- O relacionamento entre EntityManager e Query é um para muitos . Podemos executar qualquer número de consultas usando uma instância da classe EntityManager.
- O relacionamento entre EntityManager e Entity é um para muitos . Uma instância do EntityManager pode gerenciar várias entidades.
Implementações JPA
JPA é uma API de código aberto. Existem vários fornecedores empresariais, como Eclipse, RedHat, Oracle, etc. que fornecem novos produtos adicionando JPA a eles. Existem algumas estruturas populares de implementação de JPA, como Hibernar, EclipseLink, DataNucleus, etc. Também é conhecido como Mapeamento de relação de objeto (ORM).
Mapeamento de relação de objeto (ORM)
No ORM, o mapeamento de objetos Java para tabelas de banco de dados e vice-versa é chamado Mapeamento Objeto-Relacional. O mapeamento ORM funciona como uma ponte entre um banco de dados relacional (tabelas e registros) e Aplicativo Java (classes e objetos).
Na figura a seguir, a camada ORM é uma camada adaptadora. Ele adapta a linguagem dos gráficos de objetos à linguagem SQL e às tabelas de relacionamento.
A camada ORM existe entre o aplicativo e o banco de dados. Ele converte as classes e objetos Java para que possam ser armazenados e gerenciados em um banco de dados relacional. Por padrão, o nome que persiste torna-se o nome da tabela e os campos tornam-se colunas. Depois que um aplicativo é configurado, cada linha da tabela corresponde a um objeto.
Versões JPA
Versões anteriores do EJB definem a camada de persistência combinada com a camada de lógica de negócios usando javax.ejb.EntityBean Interface. A especificação EJB inclui a definição de JPA.
Ao introduzir o EJB 3.0, a camada de persistência foi separada e especificada como JPA 1.0 (Java Persistence API). As especificações desta API foram lançadas junto com as especificações do JAVA EE5 em 11 de maio de 2006, utilizando JSR 220.
Em 2019, JPA foi renomeado para Persistência em Jacarta . A versão mais recente do JPA é 2.2 . Ele suporta os seguintes recursos:
- Java 8, API de dados e tempo
- Injeção de CDI em AttributeConvertes
- Faz anotações @Repeatable
Diferença entre JPA e Hibernate
APP: JPA é uma especificação Java usada para acessar, gerenciar e persistir dados entre o objeto Java e o banco de dados relacional. É uma abordagem padrão para ORM.
Hibernar: É uma ferramenta ORM leve e de código aberto usada para armazenar objetos Java no sistema de banco de dados relacional. É um provedor de JPA. Segue uma abordagem comum fornecida pela JPA.
A tabela a seguir descreve as diferenças entre JPA e Hibernate.
APP | Hibernar |
---|---|
JPA é um Especificação Java para mapear dados de relação em aplicativos Java. | Hibernar é um Estrutura ORM que lida com persistência de dados. |
JPA não fornece nenhuma classe de implementação. | Ele fornece classes de implementação. |
Ele usa uma linguagem de consulta independente de plataforma chamada JPQL (Linguagem de consulta de persistência Java). | Ele usa sua própria linguagem de consulta chamada HQL (Linguagem de consulta de hibernação). |
É definido em javax.persistence pacote. | É definido em org.hibernate pacote. |
É implementado em várias ferramentas ORM como Hibernar, EclipseLink, etc. | Hibernar é o fornecedor do PSD. |
JPA usa EntityManager para lidar com a persistência de dados. | No Hibernate usa Sessão para lidar com a persistência de dados. |
JPA de dados iniciais do Spring Boot
Spring Boot fornece dependência inicial spring-boot-starter-data-jpa para conectar o aplicativo Spring Boot ao banco de dados relacional de forma eficiente. O spring-boot-starter-data-jpa usa internamente a dependência spring-boot-jpa.
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE
Exemplo de JPA de inicialização Spring
Vamos criar uma aplicação Spring Boot que usa JPA para se conectar ao banco de dados. No exemplo a seguir, usamos banco de dados na memória Apache Derby.
Apache Derby: É um código aberto, incorporado banco de dados relacional implementado inteiramente em Java. Está disponível sob a licença Apache 2.0. Existem as seguintes vantagens do Apache Derby:
- É fácil de instalar, implantar e usar.
- É baseado nos padrões Java, JDBC e SQL.
- Ele fornece um driver JDBC integrado que nos permite incorporar o Derby em qualquer solução baseada em Java.
- Ele também suporta o modo cliente/servidor com o driver JDBC do Derby Network Client e o Derby Network Server.
Spring Boot pode configurar automaticamente um banco de dados incorporado, como H2, SQL, e Bancos de dados Derby . Não precisamos fornecer nenhum URL de conexão. Precisamos apenas incluir uma dependência de construção no banco de dados incorporado que queremos usar.
No Spring Boot, podemos integrar facilmente o banco de dados Apache Derby apenas adicionando Dérbi dependência no arquivo pom.xml.
org.apache.derby derby runtime
Passo 1: Abra o Spring Initializr https://start.spring.io/ .
Passo 2: Selecione a versão mais recente do Spring Boot 2.3.0 (instantâneo)
Etapa 3: Proporciona a Grupo nome. Nós fornecemos com.javatpoint.
Passo 4: Proporciona a Artefato Eu ia. Nós fornecemos exemplo apache-derby .
Etapa 5: Adicione as dependências: Spring Web, Spring Data JPA, e Banco de dados Apache Derby .
Etapa 6: Clique no Gerar botão. Quando clicamos no botão Gerar, ele agrupa o projeto em um arquivo Jar e faz o download para o sistema local.
Etapa 7: extrair o arquivo Jar e cole-o no espaço de trabalho STS.
Etapa 8: importar a pasta do projeto no STS.
Arquivo -> Importar -> Projetos Maven Existentes -> Navegar -> Selecione a pasta apache-derby-example -> Concluir
Demora algum tempo para importar.
Etapa 9: Crie um pacote com o nome com.javatpoint.model na pasta src/main/java.
Etapa 10: Crie uma classe com o nome Registro do usuário Na embalagem com.javatpoint.model e faça o seguinte:
- Defina três variáveis identificação, nome, e e-mail .
- Gere Getters e Setter.
Clique com o botão direito no arquivo -> Fonte -> Gerar Getters e Setters - Defina um construtor padrão.
- Marcar a turma como Entidade usando a anotação @Entidade.
- Marca Eu ia como a chave primária usando a anotação @Eu ia.
UserRecord.java
package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Etapa 11: Crie um pacote com o nome com.javatpoint.controller na pasta src/main/java.
Etapa 12: Crie uma classe Controller com o nome Controlador de usuário Na embalagem com.javatpoint.controller e faça o seguinte:
- Marque a classe como um controlador usando a anotação @RestController.
- Autowired a classe Serviço de usuário usando a anotação @Autowired .
- Definimos dois mapeamentos, um para obtendo todos os usuários e o outro para adicionar usuário.
UserController.java
package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
Etapa 13: Crie um pacote com o nome com.javatpoint.service na pasta src/main/java.
Etapa 14: Crie uma classe de serviço com o nome Serviço de usuário Na embalagem com.javatpoint.service e faça o seguinte:
- Marque a classe como serviço usando a anotação @Serviço.
- Conectou automaticamente o Repositório de usuário
- Defina um método getAllUsers() que retorna uma lista de
- Defina outro nome de método adicionar usuário() que salva o registro do usuário.
UserService.java
package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } }
Etapa 15: Crie um pacote com o nome com.javatpoint.repository na pasta src/main/java.
Etapa 16: Crie uma interface de repositório com o nome Repositório de usuário Na embalagem com.javatpoint.repository e estende Repositório Crud .
UserRepository.java
package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { }
Etapa 17: Agora, abra o ApacheDerbyExampleApplication.java arquivo. É criado por padrão quando configuramos um aplicativo.
ApacheDerbyExampleApplication.java
package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } }
Agora configuramos todas as classes e pacotes necessários de acordo com os requisitos. Observe que não fornecemos nenhum URL de conexão para o banco de dados. Depois de concluir todas as etapas acima, o diretório do projeto terá a seguinte aparência:
Vamos executar o aplicativo.
Etapa 18: Abra o ApacheDerbyExampleApplication.java arquivo e execute-o como aplicativo Java.
Etapa 19: Abra o navegador e invoque a URL http://localhost:8080/. Ele retorna uma lista vazia porque não adicionamos nenhum usuário à lista.
ciclo while java
Para adicionar um usuário ao banco de dados, enviaremos um PUBLICAR solicite através do Carteiro .
Etapa 20: Abra o Carteiro e faça o seguinte:
- Selecione os PUBLICAR
- Invoque a URL http://localhost:8080/add-user.
- Clique no Corpo
- Selecione o tipo de conteúdo como JSON (aplicativo/json).
- Insira os dados que deseja inserir no banco de dados. Inserimos os seguintes dados:
{ 'id': '001', 'name': 'Tom', 'email': '[email protected]' }
- Clique no Enviar botão.
Quando clicamos no botão Enviar, ele mostra Estado: 200 OK . Isso significa que a solicitação foi executada com sucesso.
Etapa 21: Abra o navegador e invoque a URL http://localhost:8080. Retorna o usuário que inserimos no banco de dados.
Baixe o projeto de exemplo Apache derby