https://github.com/randintn/hibernatejpaexamples
https://github.com/randintn/hibernatejpaexamples
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/randintn/hibernatejpaexamples
- Owner: RandintN
- Created: 2022-06-06T00:34:53.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-21T04:28:13.000Z (almost 4 years ago)
- Last Synced: 2025-06-19T01:37:20.491Z (12 months ago)
- Language: Java
- Size: 7.81 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Introdução JPA e Hibernate
## Sumário
- [O que você vai aprender](#O-que-você-vai-aprender)
- [Pré-requisitos](#Pré-requisitos)
- [Visão geral sobre mapeamento objeto-relacional](#Visão-geral-sobre-mapeamento-objeto-relacional)
- [JPA](#JPA)
- [Criando uma aplicação simples](#Criando-uma-aplicação-simples)
## O que você vai aprender
- Visão geral sobre mapeamento objeto-relacional
- Introdução ao JPA - Java Persistence API
## Pré-requisitos
- Lógica de programação
- OO básica
- BD básico
## Visão geral sobre mapeamento objeto-relacional
### Outros problemas que devem ser tratados:
- Contexto de persistência (objetos que estão ou não atrelados a uma conexão em um dado momento)
- Mapa de identidade (cache de objetos já carregados)
- Carregamento tardio (lazy loading)
- Outros
## JPA
Java Persistence API (JPA) é a especificação padrão da plataforma Java EE (pacote javax.persistence) para mapeamento objeto-relacional e persistência de dados.
JPA é apenas uma especificação (JSR 338):
http://download.oracle.com/otn-pub/jcp/persistence-2_1-fr-eval-spec/JavaPersistence.pdf
Para trabalhar com JPA é preciso incluir no projeto uma implementação da API (ex: Hibernate).
Arquitetura de uma aplicação que utiliza JPA:
### Principais classes:
#### EntityManager
https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html
Um objeto EntityManager encapsula uma conexão com a base de dados e serve para efetuar operações de acesso a dados (inserção, remoção, deleção, atualização) em entidades (clientes, produtos, pedidos, etc.) por ele monitoradas em um mesmo contexto de persistência.
Escopo: tipicamente mantem-se uma instância única de EntityManager para cada thread do sistema (no caso de aplicações web, para cada requisição ao sistema).
#### EntityManagerFactory
https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManagerFactory.html
Um objeto EntityManagerFactory é utilizado para instanciar objetos EntityManager.
Escopo: tipicamente mantem-se uma instância única de EntityManagerFactory para toda aplicação.
## Criando uma aplicação simples
### Passos
#### Crie uma base de dados MySQL vazia
- Instale o Xampp no seu computador
- Inicie o Apache e o MySQL
- No PhpMyAdmin, crie uma base de dados chamada "aulajpa"
#### Crie um novo projeto Maven
- File -> New -> Other -> Maven Project
- Create Simple Project -> Next
- Group Id: com.educandoweb
- Artifact Id: aulajpamaven
-Finish
#### Copie as classes Programa e Pessoa para o novo projeto
```java
package domain;
import java.io.Serializable;
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String nome;
private String email;
public Pessoa() {
}
public Pessoa(Integer id, String nome, String email) {
super();
this.id = id;
this.nome = nome;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "Pessoa [id=" + id + ", nome=" + nome + ", email=" + email + "]";
}
}
```
```java
package application;
import domain.Person;
import domain.Pessoa;
public class Programa {
public static void main(String[] args) {
Person p1 = new Person(1, "Carlos da Silva", "carlos@gmail.com");
Person p2 = new Person(2, "Joaquim Torres", "joaquim@gmail.com");
Person p3 = new Person(3, "Ana Maria", "ana@gmail.com");
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}
}
```
#### Atualize o Maven do projeto para Java 11
- Edite o arquivo pom.xml
- Inclua o conteúdo abaixo
- Salve o projeto
- Botão direito no projeto -> Maven -> Update Project
```xml
11
11
```
#### Inclua as dependências Maven a serem baixadas:
```xml
org.hibernate
hibernate-core
5.4.12.Final
org.hibernate
hibernate-entitymanager
5.4.12.Final
mysql
mysql-connector-java
8.0.19
```
#### Configure o JPA no seu projeto por meio do arquivo persistence.xml
- Crie uma pasta "META-INF" a partir da pasta "resources"
- Dentro da pasta META-INF crie um arquivo "persistence.xml"
- Conteúdo do arquivo persistence.xml:
```xml
```
#### Inclua os MAPEAMENTOS na classe de domínio:
```java
package domain;
import (...)
@Entity
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
(...)
```
#### Na classe "Programa" faça os testes (veja vídeo-aula).