Exercício 1
Neste exercício vamos abordar como criar uma aplicação CRUD (salvar, alterar, consultar e excluir) do Livro utilizando o Java Persistence API.
Crie o seguinte banco de dados:
CREATE SEQUENCE LIVRO_SEQ INCREMENT BY 1
START WITH 1 NOCACHE NOCYCLE;
CREATE TABLE Livro (
id number(5) NOT NULL,
titulo varchar2(200) NOT NULL,
autor varchar2(200) NOT NULL,
isbn varchar2(50) NOT NULL,
paginas number(5) NOT NULL,
preco number(10,2) NOT NULL,
PRIMARY KEY(id)
);
Crie um Projeto Java chamado ExercicioJPA1, adicione as bibliotecas EclipseLink JPA e Driver da Oracle ojdbc7.jar e crie:
- Uma classe entity para representar um Livro com os atributos id, titulo, autor, isbn, paginas e preco.
package pbc.jpa.exercicio1.modelo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
/**
* Classe utilizada para representar uma Entity Livro.
* @author Rafael Guimarães Sakurai
*/
@Entity
@SequenceGenerator(name = "LIVRO_SEQ",
sequenceName = "LIVRO_SEQ", initialValue = 1,
allocationSize = 1)
public class Livro implements Serializable {
private static final long serialVersionUID
= 2405106626392673061L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "LIVRO_SEQ")
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String titulo;
@Column(nullable = false)
private String autor;
@Column(nullable = false)
private String isbn;
@Column(nullable = false)
private Integer paginas;
@Column(nullable = false)
private Double preco;
public String getAutor() { return autor; }
public void setAutor(String autor) {
this.autor = autor;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getIsbn() { return isbn; }
public void setIsbn(String isbn) { this.isbn = isbn; }
public Integer getPaginas() { return paginas; }
public void setPaginas(Integer paginas) {
this.paginas = paginas;
}
public Double getPreco() { return preco; }
public void setPreco(Double preco) {
this.preco = preco;
}
public String getTitulo() { return titulo; }
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
Crie uma classe LivroDAO com os seguintes métodos:
getEntityManager() – que cria um EntityManager
salvar() – chame o método do EntityManager que realize a operação de salvar ou alterar um livro.
consultarPorId() – chame o método do EntityManager que realize a operação de consultar passando o atributo da chave primaria.
excluir() – chame o método do EntityManager que realize a operação de remover um livro.
package pbc.jpa.exercicio1.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import pbc.jpa.exercicio1.modelo.Livro;
/**
* Classe utilizada para fazer realizar as operações de
* banco de dados sobre a entity Livro.
*/
public class LivroDAO {
/**
* Método utilizado para obter o entity manager.
* @return
*/
private EntityManager getEntityManager() {
EntityManagerFactory factory = null;
EntityManager entityManager = null;
try {
//Obtém o factory a partir da unidade de persistência.
factory = Persistence.createEntityManagerFactory
("ExercicioJPA1PU");
//Cria um entity manager.
entityManager = factory.createEntityManager();
//Fecha o factory para liberar os recursos utilizado.
} catch(Exception e) {
e.printStackTrace();
}
return entityManager;
}
/**
* Método utilizado para salvar ou atualizar as
* informações de um livro.
* @param livro
* @return
* @throws java.lang.Exception
*/
public Livro salvar(Livro livro) throws Exception {
EntityManager entityManager = getEntityManager();
try {
// Inicia uma transação com o banco de dados.
entityManager.getTransaction().begin();
System.out.println("Salvando o livro.");
/* Verifica se o livro ainda não está salvo
no banco de dados. */
if(livro.getId() == null) {
entityManager.persist(livro);
} else {
livro = entityManager.merge(livro);
}
// Finaliza a transação.
entityManager.getTransaction().commit();
} catch(Exception e) {
e.printStackTrace();
} finally {
entityManager.close();
}
return livro;
}
/**
* Método que exclui o livro do banco de dados.
* @param id
*/
public void excluir(Long id) {
EntityManager entityManager = getEntityManager();
try {
// Inicia uma transação com o banco de dados.
entityManager.getTransaction().begin();
// Consulta o livro na base de dados através do seu ID.
Livro livro = entityManager.find(Livro.class, id);
System.out.println("Excluindo o livro: "
+ livro.getTitulo());
// Remove o livro da base de dados.
entityManager.remove(livro);
// Finaliza a transação.
entityManager.getTransaction().commit();
} catch(Exception e) {
e.printStackTrace();
} finally {
entityManager.close();
}
}
/**
* Consulta o livro pelo ID.
* @param id
* @return
*/
public Livro consultarPorId(Long id) {
EntityManager entityManager = getEntityManager();
Livro livro = null;
try {
livro = entityManager.find(Livro.class, id);
} catch(Exception e) {
e.printStackTrace();
} finally {
entityManager.close();
}
return livro;
}
}
Vamos criar um arquivo persistence.xml dentro da pasta META-INF para guardar as configurações do banco de dados. Neste arquivo também vamos informar a Entity Livro.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ExercicioJPA1PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>pbc.jpa.exercicio1.modelo.Livro</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:<IP>:1521:<SERVICE_NAME>"/>
<property name="javax.persistence.jdbc.password" value="senha"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="usuario"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
Para testar as operações sobre a entidade Livro, vamos criar a classe LivroTeste que utiliza o LivroDAO para fazer uso da EntityManager para gerenciar a entity Livro.
package pbc.jpa.exercicio1.teste;
import pbc.jpa.exercicio1.dao.LivroDAO;
import pbc.jpa.exercicio1.modelo.Livro;
/**
* Classe utilizada para testar a persistência da
* entity Livro.
*/
public class LivroTeste {
public static void main(String[] args) {
try {
Livro livro = new Livro();
livro.setAutor("Rafael Guimarães Sakurai");
livro.setIsbn("111-11-1111-111-1");
livro.setPaginas(439);
livro.setPreco(30.90);
livro.setTitulo("Guia de estudos SCJA.");
LivroDAO dao = new LivroDAO();
livro = dao.salvar(livro);
System.out.println("ID do livro salvo: "
+ livro.getId());
/*
* PARA FAZER - Teste a consulta, alteração
* e exclusão do livro.
*/
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Agora só testar e terminar de implementar.
Exercício 2
Crie uma aplicação Swing ou Console utilizando JPA para fazer o CRUD (salvar, alterar, consultar e excluir) da tabela Produto a seguir:
CREATE TABLE Produto (
id number(5) NOT NULL PRIMARY KEY,
nome varchar2(200) NOT NULL,
preco number(10,2) NOT NULL,
dataValidade date,
qtdEstoque number(5)
);
Exercício 3
Crie uma aplicação Swing ou Console utilizando o JPA para fazer o CRUD (salvar, consultar, alterar e excluir) de duas entidades a sua escolha.