English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JPA Spring Boot

什么是JPA?

JPA Spring Boot 是用于管理的Java规范Java应用程序中的关系数据。它允许我们访问和持久化Java对象/类与关系数据库之间的数据。 JPA遵循mapeamento objeto-relacional(ORM)。它是一组接口。它还提供了运行时 EntityManager API para lidar com consultas e transações de objetos de banco de dados. Ele usa uma linguagem de consulta orientada a objetos, JPQL (Java Persistence Query Language), independente da plataforma.

Em termos de persistência, ele cobre três áreas:

Java Persistence API Objeto-Relacionalmeta-dadosem persistence A API definida no pacote

O JPA não é um framework. Ele define conceitos que podem ser implementados em qualquer framework.

Por que devemos usar JPA?

Em comparação com JDBC, o JPA é mais simples, mais limpo e menos intensivo em trabalho, SQL e mapeamento manual. O JPA é adequado para aplicações complexas não orientadas por desempenho. Em comparação com JDBC, a principal vantagem do JPA está no fato de 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, simplificando a programação de banco de dados. O JPA também tem outras vantagens:

JPA evita usar dialetos específicos do banco de dados SQL para DDL. Em vez disso, ele permite mapear usando XML ou anotações Java. JPA nos permite evitar escrever DML usando dialetos específicos do banco de dados SQL. JPA nos permite salvar e carregar objetos Java e gráficos sem usar nenhum DML.Quando precisamos executar consultas JPQL, ele nos permite expressar consultas usando Java entities em vez de tabelas e colunas (nativas) SQL.

Funcionalidades JPA

JPA tem as seguintes funcionalidades:

Esta é uma biblioteca de armazenamento poderosa e personalizadaabstração de mapeamento de objetos. Ele suportaPersistência transacionalIsso significa que uma entidade pode ser armazenada parcialmente em MySQL e Neo4em um sistema de gerenciamento de banco de dados gráfico (j).Ele gera consultas dinamicamente a partir do nome do método de consulta.Classes base de domínio fornecem propriedades básicas.Ele suporta auditoria transparente.Possibilidade de integração de código de armazenamento personalizado.Fácil integração com o Spring Framework através de namespaces personalizados.

Arquitetura JPA

JPA é a origem para armazenar entidades de negócios como entidades relacionais. Ele mostra como definir POJO como entidade e como gerenciar entidades através de relacionamento.

A figura a seguir descreve a arquitetura de nível de classe do JPA, que descreve as classes e interfaces nucleares do JPA. javax persistênciaPacote. A arquitetura JPA contém as seguintes unidades:

Persistence: Esta é uma classe que contém métodos estáticos para obter instâncias do EntityManagerFactory. EntityManagerFactory: É a classe fábrica do EntityManager. Cria e gerencia várias instâncias do EntityManager. EntityManager: É uma interface. Controla as operações de persistência de objetos. É aplicável ao exemplo Query. @Entity marcará a classe como: A entidade é um objeto persistente armazenado como registro no banco de dados. Unidade de persistência: Define um conjunto de todas as classes de entidade. No aplicativo, a instância EntityManager gerencia-as. Um conjunto de classes de entidade representa os dados contidos em um único armazenamento de dados. EntityTransaction: Ela tem uma relação com a classe EntityManagerum para umrelação. Para cada EntityManager, as operações são mantidas pela classe EntityTransaction. Consulta: A interface é implementada por cada provedor JPA para obter objetos de relação que atendem aos critérios.

relação de classe JPA

Os tipos de classes e interfaces discutidos acima mantêm uma relação. A figura a seguir mostra a relação entre classes e interfaces.

A relação entre EntityManager e EntityTransaction éum para umCada operação do EntityManager tem uma instância de EntityTransaction. A relação entre EntityManageFactory e EntityManager éum para muitosEsta é a classe fábrica do EntityManager. A relação entre EntityManager e Query éum para muitosPodemos usar a instância da classe EntityManager para executar qualquer quantidade de consultas. A relação entre EntityManager e Entity éum para muitosO exemplo de instância EntityManager pode gerenciar múltiplas entidades.

implementação JPA

O JPA é uma API de código aberto. Existem várias provedoras de empresas, como Eclipse, RedHat, Oracle, que oferecem novos produtos adicionando JPA. Existem várias implementações de frameworks populares de JPA, como Hibernate, EclipseLink, DataNucleus etc. Também é conhecido comomapeamento objeto-relacional(ferramentas) de mapeamento objeto-relacional.

mapeamento objeto-relacional (ORM)

No ORM, o mapeamento de objetos Java para tabelas de banco de dados (e vice-versa) é chamado demapeamento objeto-relacional. O mapeamento ORM desempenhabanco de dados relacionale (tabela e registro) e aplicação Javaponte entre (classe e objeto).

Como mostrado na figura abaixo, a camada ORM é uma camada de adaptador. Ela adapta a linguagem do diagrama de objetos ao SQL e à linguagem das tabelas relacionais.

A camada ORM existe entre a aplicação e o banco de dados. Ela converte classes e objetos Java para que possam ser armazenados e gerenciados em bancos de dados relacionais. Por padrão, o nome da persistência se tornará o nome da tabela, enquanto os campos se tornarão colunas. Assim que a aplicação for configurada, cada linha da tabela corresponderá a um objeto.

versão JPA

Versões anteriores do EJB definiram uma camada persistente integrada à camada de lógica de negócios. Utiliza javax.ejb.EntityBean interface. A especificação EJB inclui a definição do JPA.

ao introduzir EJB 3.0, a camada de persistência foi separada e especificada como JPA 1.0 (Java Persistence API). A especificação do API de persistência já foi lançada com2006ano5mês11dia usando JSR 220 do JAVA EE5especificação, lançada junto com

2019ano, o JPA foi renomeado para Jakarta Persistence . A versão mais recente do JPA é 2.2 . Ele suporta as seguintes funcionalidades:

Java 8e APIs de dados e tempo AttributeConvertes com a anotação @RepeatableEle permite a injeção CDI em

Diferenças entre JPA e Hibernate

JPA: JPA é uma especificação Java usada para acessar, gerenciar e persistir dados entre objetos Java e bancos de dados relacionais. É o método padrão ORM.

Hibernate: É uma ferramenta ORM leve e open source usada para armazenar objetos Java em sistemas de banco de dados relacionais. É provedor do JPA. Siga o método comum fornecido pelo JPA.

A tabela a seguir descreve a diferença entre JPA e Hibernate.

JPA Hibernate
JPA é uma especificação Java usada para mapear dados relacionais em aplicações Java. Java.Hibernate é uma especificação Java usada para lidar com a persistência de dados. Framework ORM.
JPA não fornece nenhuma classe de implementação.Fornecendo classes de implementação.
Usa chamada JPQL (Java Persistence Query Language) linguagem de consulta independente da plataforma.Usa sua própria chamada HQL linguagem de consulta (linguagem de consulta Hibernate).
Definido no javax.persistence pacote.Definido no org.hibernate pacote.
Definido no Hibernate, EclipseLink e outras ferramentas ORM.Hibernate é um implementador do JPAprovedor.
JPA usa EntityManager manter a persistência de dados.No Hibernate, use Sessão manter a persistência de dados.

Spring Boot inicializador de dados JPA

Spring Boot fornece dependências de inicialização spring-boot-starter-data-jpa para usar eficientemente bancos de dados relacionais com aplicativos Spring Boot. spring-boot-starter-data-jpa usa internamente o spring-boot-jpa dependência.

<dependency>  
<groupId>org.springframework.boot</groupId>  
<artifactId>spring-boot-starter-data-jpa</artifactId>  
<version>2.2.2.RELEASE</versão>  
</dependency>

Exemplo Spring Boot JPA

Criamos uma aplicação Spring Boot que se conecta ao banco de dados usando JPA. No exemplo a seguir, usamos um banco de dados em memória Apache Derby。

Apache Derby : Isso é um banco de dados embarcadoSoftware livreBanco de dados relacional completamente implementado em Java. Ele está sob a licença Apache License 2Disponível sob .0. Apache Derby tem os seguintes benefícios:

Fácil de instalar, implantar e usar.Ele é baseado em Java, JDBC e padrões SQL.Ele fornece um driver JDBC embarcado, permitindo-nos integrar o Derby em qualquer solução baseada em Java.Ele também suporta clientes através do driver JDBC do Cliente de Rede Derby e do Servidor de Rede Derby/modo servidor.

O Spring Boot pode configurar automaticamente o banco de dados embarcado, por exemplo H2,HSQL,e Derbydatabases . Não precisamos fornecer nenhum URL de conexão. Precisamos apenas incluir a dependência de construção do banco de dados embarcado.

No Spring Boot, é só adicionar no pom Derby Para integrar facilmente o banco de dados Apache Derby, adicione a dependência xml.

<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<scope>runtime</scope>
</dependency>

Passos1: Abra o Spring Initializr https://start.spring.io/.

Passos2: Selecione a versão mais recente do Spring Boot 2.3.0(SNAPSHOT)

Passos3: forneceGroupNome. Fornecemos com.w3codebox.

Passos4: forneceArtifact ID. Fornecemos apache-derby-example .

Passos5: Adicionar dependências: Spring Web, Spring Data JPAe Banco de dados Apache Derby.

Passos6: Clique Generate (Gerar) botão. Quando clicamos no botão "Gerar", ele empacota o projeto em um arquivo Jar e o baixa para o sistema local.

Passos7: Extrair Arquivo Jar e cole-o na área de trabalho do STS.

Passos8: Importar

Arquivo->Importar->Projeto Maven existente->Navegue->Selecione a pasta apache-derby-example->Concluído

A importação leva algum tempo.

Passos9: na pasta src/main/javaem criação de um nome com.w3codebox.model do pacote.

Passos10: no pacote com.w3codebox.model em criação de um nome codebox.model UserRecord

da classe, então execute as seguintes: Definir três variáveis.id, name e email
Gerar Getter e Setter.-> Clique com o botão direito no arquivo-> Código Fonte
> Gerar Getter e SetterUsar anotações Definir o construtor padrão.@Entity marcará a classe como. Usar anotações @Id marcará Id Marcar como chave primária.

UserRecord.java

package com.w3codebox.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity  
public class UserRecord 
{ 
@Id  
private int id;  
private String name;  
private String email;
//Construtor padrão  
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;  
}  
}

Passos11: em src/main/Crie um arquivo com o nome com.w3codebox.controller do pacote.

Passos12: no pacote com.w3codebox.controller em criação de um nome UserController Classe Controller, e execute as seguintes operações:

Usar anotações @RestController Marcar a classe como controlador.Usar anotações @Autowired Classe de conexão automática UserService .Definimos dois mapeamentos, um mapeamento paraObter todos os usuários,另一个映射用于Adicionar usuário.

UserController.java

package com.w3codebox.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.w3codebox.model.UserRecord;
import com.w3codebox.service.UserService;
import java.util.List;  
@RestController  
public class UserController 
{  
@Autowired  
private UserService userService;   
@RequestMapping("/")  
public List<UserRecord> getAllUser()
{  
return userService.getAllUsers();  
}     
@RequestMapping(value="/add-user, method=RequestMethod.POST)  
public void addUser(@RequestBody UserRecord userRecord)
{  
userService.addUser(userRecord);  
}     
}

Passos13: na pasta src/main/criar um nome chamado com.w3codebox.service do pacote.

Passos14: no pacote com.w3codebox.service em criação de um nome UserController da classe Service e execute as seguintes operações:

usando a anotação @Servicemarcar essa classe como serviço. conexão automática UserRepository definir método getAllUsers()a seguinte lista é retornada: definir outro nome para o método addUser()para salvar o registro do usuário.

UserService.java

package com.w3codebox.service;  
import java.util.List;  
import java.util.ArrayList;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;
import com.w3codebox.model.UserRecord;
import com.w3codebox.repository.UserRepository;  
@Service  
public class UserService 
{  
@Autowired  
private UserRepository userRepository;  
public List<UserRecord> getAllUsers()
{  
List<UserRecord>userRecords = new ArrayList<>();  
userRepository.findAll().forEach(userRecords::add);  
return userRecords;  
}  
public void addUser(UserRecord userRecord)
{  
userRepository.save(userRecord);  
}  
}

Passos15: na pasta src/main/javaem criação de um nome com.w3codebox.repository do pacote.

Passos16: no pacote com.w3codebox.repository em criação de um nome UserRepository a interface de armazenamento, e estende CrudRepository .

UserRepository.java

package com.w3codebox.repository;  
import org.springframework.data.repository.CrudRepository;
import com.w3codebox.model.UserRecord;  
public interface UserRepository extends CrudRepository<UserRecord, String> 
{  
}

Passos17: Agora, abra ApacheDerbyExampleApplication.java O arquivo. Ele é criado por padrão quando configuramos o aplicativo.

ApacheDerbyExampleApplication.java

package com.w3codebox;
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, já configuramos todos os tipos e pacotes necessários conforme solicitado. Por favor, note que não fornecemos nenhumaURL de Conexão . Após concluir todos os passos acima, a estrutura do diretório do projeto será como follows:

Vamos executar o aplicativo.

Passos18: Abra ApacheDerbyExampleApplication.java Arquivo e execute-o como aplicativo Java.

o19Passo: Abra o navegador e chame a URL http://localhost:8080/. Como nenhum usuário foi adicionado à lista, uma lista vazia é retornada.

Para adicionar o usuário ao banco de dados, usaremosEnviar POST Solicitação Postman.

Passos20: AbraPostman, e execute as seguintes operações:

Escolha POST Chame a URL http://localhost:8080/add-user。CliqueBody Escolha Content-Type comoJSON (application/json).Insira os dados a seguir no banco de dados. Inserimos os seguintes dados:

{
"id": "00"1",
"name": "Tom",
"email": "[email protected]"
}

CliqueEnviarbotão.

Quando clicamos no botão "Enviar", ele mostraEstado: 200 OK . Isso significa que a solicitação foi executada com sucesso.

Passos21: Abra o navegador e chame a URL http: //localhost: 8080. Ele retorna os usuários que já inserimos no banco de dados.