Implementando Entidades: Java

Introdução

O mundo da TI se movimenta em torno de Informação. Essas informações devem ser bem armazenadas, podendo estar em uma agenda, CD, iPod ou em um Banco de Dados que é o nosso caso.

Para armazenarmos as informações no Banco de Dados utilizando o JAVA precisamos de classes-entidades que representam um conceito de “modelo de entidade”, isto é, representam as tabelas e seus atributos. Este conceito de classes-entidades denomina-se: Mapeamento objeto-relacional.

Antes de iniciar

Este item exige conhecimentos sobre: - Interface - Enum

Criando Entidades no Java

Como vimos, as classes representam uma entidade. Se você tem um sistema de e-commerce, por exemplo, você pode ter entidades como Cliente, NotaFiscal, Pedido, CarrinhoDeCompras, etc.

Contudo, todas as entidades deverão ter atributos que, de fato, resolvam o problema do cliente. Em outras palavras, é necessário entendermos a Especificação.

Siga o checklist abaixo: <table class="table table-bordered">

Quais os campos nossa entidade deve ter? help! Como criar uma entidade no Java? help!

</table>

Quais os campos nossa entidade deve ter?

Imagine o seguinte cenário: Nosso cliente armazena os funcionários que ele admite em um caderno e risca o nome dos funcionários demitidos. Pela quantidade extensa de funcionários ele já não consegue buscá-los e/ou excluí-los rapidamente.

Assim começamos a pensar nos campos que este funcionário poderia ter.

Precisaremos dos campos seguintes?

  • Nome
  • Matrícula
  • Data de nascimento
  • Data de admissão
  • Data de demissão
  • Superior
  • Diretor
  • Regime De Contratacao
  • Carteira de habilitação

O nome e matrícula são essenciais para armazenar um funcionário (com o nome e a matrícula podemos realizar consultas rapidamente, em outras palavras temos um identificadores do funcionário).
A data de nascimento pode ser utilizada para listar os aniversariantes do mês corrente.
A data de admissão e data de demissão para cálculos de FGTS, entre outros.
Os campos Superior e Diretor serão utilizados por exemplo para consultar o superior responsável por determinado funcionário.
O campo RegimeDeContratacao é utilizado para saber o tipo de contratação do funcionário (CLT, estágio, PJ).
E a carteira de habilitação para saber quais funcionários podem realizar trabalhos de campo.

Imagine um segundo cenário: Vamos considerar que nosso cliente não precisa saber se o funcionário possui CNH (Carteira Nacional de Habilitação) porque sua empresa não realiza trabalhos que necessitem da locomoção dos funcionários, sendo assim informações sobre CNH do funcionário são irrelevantes para nosso sistema.

O que queremos dizer aqui é: A especificação é o ponto de partida para se trabalhar em um projeto e conseguir resolver o problema do seu cliente (armazenar/buscar funcionários rapidamente). E também conseguir pensar em futuras melhorias para o sistema (campos de admissão e demissão por exemplo).

Agora podemos criar a entidade Funcionario.

Como criar uma entidade no Java?

Para criar uma Interface chamada Funcionario primeiramente selecionamos o diretório desejado em nosso exemplo será /src/main/java/, em seguida utilizamos as teclas de atalho Ctrl + N e escolhemos a opção Criar Interface

A interface deverá extender outra interface chamada Insertable e conter todos os métodos get() referentes a cada atributo da entidade ‘Funcionario’.

Dentro da interface ‘Funcionario’ iremos criar uma outra interface chamada Construtor, que será responsável por criar uma nova instância de Funcionario.

public interface Funcionario extends Insertable {

  interface Construtor extends br.com.objectos.comuns.base.Construtor<Funcionario> {

	String getNome();

	String getMatricula();

	LocalDate getDataNascimento();

	LocalDate getDataAdmissao();

	LocalDate getDataDemissao();

	Superior getSuperior();

	Diretor getDiretor();

	Contrato getRegimeDeContratacao();

  }

  int getId();

  String getNome();

  String getMatricula();

  LocalDate getDataNascimento();

  LocalDate getDataAdmissao();

  LocalDate getDataDemissao();

  Superior getSuperior();

  Diretor getDiretor();

  Contrato getRegimeDeContratacao();

}

O que fizemos aqui foi definir os campos da entidade Funcionario e um Construtor que servirá para instanciar objetos (veremos isto mais adiante).

Importante: A interface `Construtor` não terá o método `getId()`, pois iremos considerar que o atributo `ID` será gerado automaticamente através do banco de dados como veremos mais adiante na implementação da classe `FuncionarioJdbc`.

Criaremos agora um enum Contrato (no mesmo pacote de Funcionario) que represente o campo “regime de contratação” considerando que nosso cliente requisitou este item para cada funcionário.

public enum Contrato {

  CLT,
  
  ESTAGIO

}

Criaremos agora uma classe FuncionarioJdbc (no mesmo pacote de Funcionario) que irá implementar a interface Funcionario.

Primeiramente vamos criar um construtor para esta classe através do atalho Alt + s + c.

public class FuncionarioJdbc implements Funcionario {
	
  public FuncionarioJdbc() {
    super();
  }
  
}

Em seguida apagamos o método super() e passaremos a interface Construtor de Funcionario como parâmetro para o construtor de FuncionarioJdbc.

public class FuncionarioJdbc implements Funcionario {

  public FuncionarioJdbc(Construtor construtor) {
  
  }
  
}

Agora usaremos o parâmetro construtor para acessar os métodos da interface Construtor de Funcionario. Após isso usaremos o atalho Ctrl + 2 + F para criar variáveis para estes atributos dentro da classe FuncionarioJdbc

public class FuncionarioJdbc implements Funcionario {
	
  private final String nome;

  public FuncionarioJdbc(Construtor construtor) {
    nome = construtor.getNome();
  }
  
}

Feito isso para todos os atributos devemos agora implementar os métodos da interface Funcionario utilizando os atalhos Ctrl + ponto para selecionar o erro de compilação, em seguida Ctrl + 1 para correção e então escolhemos a opção para implementar os métodos.

public class FuncionarioJdbc implements Funcionario {
	
  private int id;
  private final String nome;
  private final String matricula;
  private final LocalDate dataNascimento;
  private final LocalDate dataAdmissao;
  private final LocalDate dataDemissao;
  private final Superior superior;
  private final Diretor diretor;
  private final Contrato regimeDeContratacao;

  public FuncionarioJdbc(Construtor construtor) {
  nome = construtor.getNome();
  matricula = construtor.getMatricula();
  dataNascimento = construtor.getDataNascimento();
  dataAdmissao = construtor.getDataAdmissao();
  dataDemissao = construtor.getDataDemissao();
  superior = construtor.getSuperior();
  diretor = construtor.getDiretor();
  regimeDeContratacao = construtor.getRegimeDeContratacao();        
  }

  
  @Override
  public Insert getInsert() {
    return null;
  }
	
  @Override
  public int getId() {
    return null;
  }

  @Override
  public String getNome() {
    return null;
  }
	
  @Override
  public String getMatricula() {
    return null;
  }
	
  @Override
  public LocalDate getDataDeNascimento() {
    return null;
  }
	  
  @Override
  public LocalDate getDataDeAdmissao() {
    return null;
  }  
	
  @Override
  public LocalDate getDataDeDemissao() {
    return null;
  }  

  @Override
  public Superior getSuperior() {
    return null;
  }

  @Override
  public Diretor getDiretor() {
    return null;
  }
	
  @Override
  public Contrato getRegimeDeContratacao() {
    return null;
  }
	
}

Criaremos em seguida um método chamado setId() e definimos o retorno dos métodos sobrescritos.

O método getInsert() será utilizado para inserir as informações no banco de dados, por isso nele deverá constar o nome da tabela que estamos trabalhando e também os nomes das colunas utilizadas para inserir cada atributo conforme abaixo:

public class FuncionarioJdbc implements Funcionario {
	
  private int id;
  private final String nome;
  private final String matricula;
  private final LocalDate dataNascimento;
  private final LocalDate dataAdmissao;
  private final LocalDate dataDemissao;
  private final Superior superior;
  private final Diretor diretor;
  private final Contrato regimeDeContratacao;

  public FuncionarioJdbc(Construtor construtor) {
  nome = construtor.getNome();
  matricula = construtor.getMatricula();
  dataNascimento = construtor.getDataNascimento();
  dataAdmissao = construtor.getDataAdmissao();
  dataDemissao = construtor.getDataDemissao();
  superior = construtor.getSuperior();
  diretor = construtor.getDiretor();
  regimeDeContratacao = construtor.getRegimeDeContratacao();        
  }
  
  @Override
  public Insert getInsert() {
    return Insert.into("DATABASE.FUNCIONARIO")

      .value("NOME", nome)
      .value("MATRICULA", matricula)
      .value("DATA_NASCIMENTO", dataNascimento)
      .value("ADMISSAO", dataAdmissao)
      .value("DEMISSAO", dataDemissao)
      .value("SUPERIOR_ID", superior.getId())
      .value("DIRETOR_ID", diretor.getId())
      .value("REGIME_CONTRATACAO", regimeDeContratacao.ordinal())

      .onGeneratedKey(new GeneratedKeyCallback() {
        @Override
        public void set(ResultSet rs) throws SQLException {
          id = rs.next() ? rs.getInt(1) : 0;
        }
      });
  }
	
  @Override
  public int getId() {
    return id;
  }
	
  void setId(int id) {
    this.id = id;
  }
	
  @Override
  public String getNome() {
    return nome;
  }
	
  @Override
  public String getMatricula() {
    return matricula;
  }
	
  @Override
  public LocalDate getDataDeNascimento() {
    return dataDeNascimento;
  }
	  
  @Override
  public LocalDate getDataDeAdmissao() {
    return dataDeAdmissao;
  }  
	
  @Override
  public LocalDate getDataDeDemissao() {
    return dataDeDemissao;
  }  

  @Override
  public Superior getSuperior() {
  return superior;
  }

  @Override
  public Diretor getDiretor() {
  return diretor;
  }
	
  @Override
  public Contrato getRegimeDeContratacao() {
    return regimeDeContratacao;
  }
	
}

Nota: TODAS as entidades DEVEM ter um método getId() e setId().

Códigos-fonte

Funcionario.java
FuncionarioJdbc.java
Contrato.java

Siga para o próximo passo. Objetos falsos! Continuar!
Leia mais uma vez! Revisar!


 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br