Exercícios

Exercício 1

Neste exercício vamos abordar como funciona os relacionamentos entre as entidades, vamos utilizar o relacionamento entre as entidades Cliente e Endereco, quando salvar o cliente também deve salvar o endereço e quando o cliente for consultado deve trazer também as informações do endereço.

Crie o seguinte banco de dados:

CREATE SEQUENCE CLI_SEQ INCREMENT BY 1 
  START WITH 1 NOCACHE NOCYCLE;
CREATE SEQUENCE END_SEQ INCREMENT BY 1 
  START WITH 1 NOCACHE NOCYCLE;

CREATE TABLE ENDERECO (
  id number(5) NOT NULL PRIMARY KEY,
  estado VARCHAR2(50) NOT NULL,
  cidade VARCHAR2(50) NOT NULL,
  bairro VARCHAR2(50) NOT NULL,
  logradouro VARCHAR2(50) NOT NULL,
  complemento VARCHAR2(50) NOT NULL
);

CREATE TABLE CLIENTE (
  id number(5) NOT NULL PRIMARY KEY,
  nome VARCHAR2(100) NOT NULL,
  endereco_id number(5) NOT NULL
);

Crie um projeto Java chamado ExercicioJPA4, adicione as bibliotecas EclipseLink JPA e Driver da Oracle ojdbc7.jar e crie:

  • Classe entity para representar um endereço com os atributos id, estado, cidade, bairro, logradouro e complemento.
package pbc.jpa.exercicio4.modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

/**
 * Classe utilizada para representar um Endereço.
 */
@Entity
@SequenceGenerator(name = "ENDERECO_SEQ", 
  sequenceName = "END_SEQ", initialValue = 1,
  allocationSize = 1)
public class Endereco implements Serializable {
  private static final long serialVersionUID 
    = 5331450149454053703L;

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator = "ENDERECO_SEQ")
  private Long id;
  private String estado;
  private String cidade;
  private String bairro;
  private String logradouro;
  private String complemento;

  public String getBairro() { return bairro; }
  public void setBairro(String bairro) {
    this.bairro = bairro;
  }

  public String getCidade() { return cidade; }
  public void setCidade(String cidade) {
    this.cidade = cidade;
  }

  public String getComplemento() { return complemento; }
  public void setComplemento(String complemento) {
    this.complemento = complemento;
  }

  public String getEstado() { return estado; }
  public void setEstado(String estado) {
    this.estado = estado;
  }

  public Long getId() { return id; }
  public void setId(Long id) { this.id = id; }

  public String getLogradouro() { return logradouro; }
  public void setLogradouro(String logradouro) {
    this.logradouro = logradouro;
  }
}
  • Classe entity para representar um cliente com id, nome e endereço, note que vamos utilizar a anotação javax.persistence.OneToOne para definir o relacionamento de um-para-um entre as entidades Cliente e Endereco.
package pbc.jpa.exercicio4.modelo;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;

/**
 * Classe utilizada para representar um Cliente.
 */
@Entity
@SequenceGenerator(name = "CLIENTE_SEQ", 
  sequenceName = "CLI_SEQ", initialValue = 1,
  allocationSize = 1)
public class Cliente implements Serializable {
  private static final long serialVersionUID 
    = 4521490124826140567L;

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator = "CLIENTE_SEQ")
  private Long id;
  private String nome;
  @OneToOne(cascade=CascadeType.ALL)
  private Endereco endereco;

  public Endereco getEndereco() { return endereco; }
  public void setEndereco(Endereco endereco) {
    this.endereco = endereco;
  }

  public Long getId() { return id; }
  public void setId(Long id) { this.id = id; }

  public String getNome() { return nome; }
  public void setNome(String nome) { this.nome = nome; }
}
  • Crie o arquivo persistence.xml dentro da pasta META-INF do projeto, note que neste arquivo vamos informar qual o banco de dados iremos utilizar e quais classes são entidades do banco:
<?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="ExercicioJPA4PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>pbc.jpa.exercicio3.modelo.Endereco</class>
    <class>pbc.jpa.exercicio3.modelo.Cliente</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>
  • Crie a classe ClienteDAO que será responsável por utilizar o EntityManager para manipular (salvar, alterar, remover e consultar por id) as informações referentes ao Cliente.
package pbc.jpa.exercicio4.dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import pbc.jpa.exercicio4.modelo.Cliente;
import pbc.jpa.exercicio4.modelo.Endereco;

/**
 * Classe utilizada para fazer as operações de 
 * banco de dados sobre a entity Cliente.
 */
public class ClienteDAO {

  /**
   * 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 persistencia.
      factory = Persistence.createEntityManagerFactory
        ("ExercicioJPA4PU");
      //Cria um entity manager.
      entityManager = factory.createEntityManager();
    } catch(Exception e){
      e.printStackTrace();
    }
    return entityManager;
  }

  /**
   * Método que salva ou atualiza as informações do cliente.
   * @param cliente
   * @return
   * @throws java.lang.Exception
   */
  public Cliente salvar(Cliente cliente) throws Exception {
    EntityManager entityManager = getEntityManager();
    try {
      // Inicia uma transação com o banco de dados.
      entityManager.getTransaction().begin();
      System.out.println("Salvando as informações do cliente.");
      /* Verifica se o cliente ainda não está salvo
        no banco de dados. */
      if(cliente.getId() == null) {
        entityManager.persist(cliente);
      } else {
        cliente = entityManager.merge(cliente);
      }
      // Finaliza a transação.
      entityManager.getTransaction().commit();
    } catch(Exception ex) {
      entityManager.getTransaction().rollback();
    } finally {
      entityManager.close();
    }
    // Retorna o cliente salvo.
    return cliente;
  }

  /**
   * Método que apaga as informações do cliente 
   * do banco de dados.
   * @param id
   */
  public void apagar(Long id) {
    EntityManager entityManager = getEntityManager();
    try {
      // Inicia uma transação com o banco de dados.
      entityManager.getTransaction().begin();
      // Consulta o cliente na base de dados através do seu ID.
      Cliente cliente = entityManager.find(Cliente.class, id);
      System.out.println("Excluindo o cliente: " 
        + cliente.getNome());

      // Remove o cliente da base de dados.
      entityManager.remove(cliente);
      // Finaliza a transação.
      entityManager.getTransaction().commit();
    } catch(Exception ex) {
      entityManager.getTransaction().rollback();
    } finally {
      entityManager.close();
    }
  }

  /**
   * Consulta o cliente pelo ID.
   * @param id
   * @return
   */
  public Cliente consultarPorId(Long id) {
    EntityManager entityManager = getEntityManager();
    Cliente cliente = null;
    try {
      //Consulta o cliente pelo ID.
      cliente = entityManager.find(Cliente.class, id);
    } finally {
      entityManager.close();
    }
    //Retorna o cliente consultado.
    return cliente;
  }
}

Vamos desenvolver a interface gráfica em SWING que será responsável por chamar o ClienteDAO para executar as operações no banco de dados.

Cadastro de Cliente

Código fonte da tela de cadastro do cliente.

Observação: este código não está completo, ele possui apenas implementado o código dos botões.

package pbc.jpa.exercicio4.tela;

import javax.swing.JOptionPane;
import pbc.jpa.exercicio4.dao.ClienteDAO;
import pbc.jpa.exercicio4.modelo.Cliente;
import pbc.jpa.exercicio4.modelo.Endereco;

/**
 * Classe utilizada para representar o cadastro do Cliente.
 */
public class CadastroCliente extends javax.swing.JFrame {
  private static final long serialVersionUID 
    = -6011351657657723638L;

  public CadastroCliente() {
    initComponents();
  }

  /**
   * Código para montar a tela.
   */
  @SuppressWarnings("unchecked")
  private void initComponents() {
    //Código que monta a tela mostrada na imagem anterior.
  }

  /**
   * Botão que salva as informações do cliente.
   * 
   * @param evt
   */
  private void botaoSalvarActionPerformed(
    java.awt.event.ActionEvent evt) {                                            
    try {
      //Cria um objeto endereco;
      Endereco e = new Endereco();
      e.setEstado(this.estado.getText());
      e.setCidade(this.cidade.getText());
      e.setBairro(this.bairro.getText());
      e.setLogradouro(this.logradouro.getText());
      e.setComplemento(this.complemento.getText());

      //Cria um objeto cliente.
      Cliente c = new Cliente();
      c.setNome(this.nome.getText());
      c.setEndereco(e);

      //Salva o cliente.
      ClienteDAO dao = new ClienteDAO();
      c = dao.salvar(c);

      JOptionPane.showMessageDialog(this, "Cliente "
        + c.getId() + " - " + c.getNome(), "INFORMAÇÃO",
        JOptionPane.INFORMATION_MESSAGE);
      limparDados();
    } catch (Exception ex) {
      JOptionPane.showMessageDialog(this, ex.getMessage(), 
        "ERRO", JOptionPane.ERROR_MESSAGE);
    }
  }     

  /**
   * Botão que consulta as informações do cliente.
   * 
   * @param evt
   */
  private void botaoConsultarActionPerformed(
    java.awt.event.ActionEvent evt) {                                               
    try {
      ClienteDAO dao = new ClienteDAO();
      Cliente c = dao.consultarPorId(Long.valueOf(this.id.getText()));

      if(c != null) {
        this.nome.setText(c.getNome());
        this.estado.setText(c.getEndereco().getEstado());
        this.cidade.setText(c.getEndereco().getCidade());
        this.bairro.setText(c.getEndereco().getBairro());
        this.logradouro.setText(c.getEndereco().getLogradouro());
        this.complemento.setText(c.getEndereco().getComplemento());
      } else {
        limparDados();
        JOptionPane.showMessageDialog(this, 
          "Cliente não foi encontrado!", 
          "ERRO", JOptionPane.ERROR_MESSAGE);
      }
    } catch (NumberFormatException ex) {
      JOptionPane.showMessageDialog(this, 
        "O campo código precisa ser um número inteiro",
        "ERRO", JOptionPane.ERROR_MESSAGE);
    }
  }                                              

  /**
   * Botão para limpar as informações do formulario 
   * para cadastrar um novo cliente.
   * 
   * @param evt
   */
  private void botaoNovoActionPerformed(
    java.awt.event.ActionEvent evt) {                                          
    limparDados();
  }                                         

  /**
   * Botão para remover as informações referentes a um cliente.
   *
   * @param evt
   */
  private void botaoApagarActionPerformed(
    java.awt.event.ActionEvent evt) {                                            
    try {
      ClienteDAO dao = new ClienteDAO();
      dao.apagar(Long.valueOf(this.id.getText()));
      limparDados();
      JOptionPane.showMessageDialog(this, 
        "As informações do cliente foram apagadas do sistema.",
        "INFORMAÇÃO", JOptionPane.INFORMATION_MESSAGE);
    } catch (NumberFormatException ex) {
      JOptionPane.showMessageDialog(this, 
        "O campo código precisa ser um número inteiro",
        "ERRO", JOptionPane.ERROR_MESSAGE);
    }
  }                                           

  /**
   * Limpa os dados do formulario.
   */
  private void limparDados() {
    this.id.setText(null);
    this.nome.setText(null);
    this.estado.setText(null);
    this.cidade.setText(null);
    this.bairro.setText(null);
    this.logradouro.setText(null);
    this.complemento.setText(null);
  }

  /**
   * @param args the command line arguments
   */
  public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
        new CadastroCliente().setVisible(true);
      }
    });
  }

  private javax.swing.JTextField bairro;
  private javax.swing.JButton botaoApagar;
  private javax.swing.JButton botaoConsultar;
  private javax.swing.JButton botaoNovo;
  private javax.swing.JButton botaoSalvar;
  private javax.swing.JTextField cidade;
  private javax.swing.JTextField complemento;
  private javax.swing.JTextField estado;
  private javax.swing.JTextField id;
  private javax.swing.JLabel labelBairro;
  private javax.swing.JLabel labelCadastroCliente;
  private javax.swing.JLabel labelCidade;
  private javax.swing.JLabel labelCodigo;
  private javax.swing.JLabel labelComplemento;
  private javax.swing.JLabel labelEstado;
  private javax.swing.JLabel labelLogradouro;
  private javax.swing.JLabel labelNome;
  private javax.swing.JTextField logradouro;
  private javax.swing.JTextField nome;
}

Exercício 2

Neste exercício vamos desenvolver uma aplicação swing para implementar o seguinte requisito de sistema:

Precisamos controlar as vendas de instrumentos musicais, desenvolva uma aplicação para cadastrar, alterar, consultar pelo código e remover os instrumentos musicais (marca, modelo e preço). Também devemos cadastrar as vendas feitas para um cliente, onde o cliente (nome, cpf e telefone) pode comprar diversos instrumentos musicais. Não temos a necessidade de controlar o estoque dos produtos, pois apenas será vendido os itens que estão nas prateleiras.

results matching ""

    No results matching ""