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.

results matching ""

    No results matching ""