An open API service indexing awesome lists of open source software.

https://github.com/randintn/hibernatejpaexamples


https://github.com/randintn/hibernatejpaexamples

Last synced: 10 months ago
JSON representation

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).