Olá desenvolvedores, no tutorial de hoje implementaremos o DAO genérico ou objeto de acesso aos dados que é um padrão em desenvolvimento de aplicações que precisam persistir os dados. Assim é possível separar as regras de negócio das operações de banco de dados.
Desse modo, todas as operações, seja para salvar, consultar, atualizar ou excluir dados, devem obrigatoriamente passar pela classe DAO – Data Access Object. Na classe DAO é onde os métodos que implementam as operações da base de dados serão criados.
IMPLEMETANDO O DAO
O primeiro passo é a criação do package br.com.dao, assim, dentro do pacote crie a classe DaoGeneric. Desse modo, para que a classe possa salvar qualquer objeto é preciso passar qualquer letra entre o símbolo de maior e menor.
public class DaoGeneric<E> {
}
No escopo da classe DaoGeneric implementaremos os métodos relativo as operações da base de dados. O primeiro método a ser implementado é o método salvar() que como parâmetro receberá uma entidade.
public void salvar(E entidade){
}
Agora é preciso prover a persistência, e para isso estabeleceremos o EntityManager que vai invocar a classe JPAUtil. A classe JPAUtil, por sua vez, irá instanciar um EntityManager, deixando-o disponível para toda a aplicação sempre que subirmos o projeto “subir”, ou seja, sempre que ele for colocado “online”.
Assim, todos os usuários compartilharão dessa mesma instância do framework para realizar todas as operações do banco de dados. Mas para que essas transações da base de dados sejam possíveis, chamaremos o EntityTransaction que é quem obterá a transação. Esta transação deverá ser iniciada, isto é, deverá ser colocada como ativa. E por fim o entityManager irá salvar a entidade que for recebida por parâmetro.
A partir do momento que os dados foram salvos eles deverão ser “commitados” e a transação encerrada. Quando em uma transação do banco de dados as operações são concluídas com sucesso, sendo os dados permanentemente alterados, damos a esta operação o nome de COMMIT. Em outras palavras, COMMIT é o ato de enviar dados para serem armazenados no banco de dados.
entityTransaction.commit();
entityManager.close();
IMPLEMENTANDO A ENTIDADE
No escopo da classe PessoaBean, iremos instanciar o objeto Pessoa bem como o DaoGeneric recebendo como argumento a entidade pessoa.
Porém, é preciso implementar também dentro do ManagedBean um método salvar() que será chamado na tela. Visto que o ManagedBean é a uma classe que “delega” funções específicas para cada View da aplicação.
O método o ManagedBean irá invocar o método salvar() do DaoGeneric passando com argumento o objeto pessoa. Os métodos Getters and Setters deverão ser gerados para “pessoa”. E dentro do escopo do método o objeto pessoa deverá ser novamente instanciado para que possamos criar uma nova pessoa.
Como os dados deverão ser retornados para a mesma página, o return retornará uma String vazia.
public String salvar (){
dao.Generic.salvar(pessoa);
pessoa = newPessoa();
return "";
}
Basicamente é o que precisamos para um primeiro cadastro, onde “Pessoa” é o objeto para qual os dados serão injetados, e que também representa a tabela do banco de dados.
IMPLEMENTAÇÃO DA TELA
Para a implementação da tela de cadastro consideramos os atributos nome, sobrenome e idade. Assim, criaremos estes campos em um pequeno formulário de cadastro na página primeirapagina.xhtml. Você tem liberdade para estilizar este cadastro da forma que quiser.
EM POUCAS PALAVRAS
Pode acontecer que o servidor exija que todos as bibliotecas .jar sejam colocados dentro dele. Assim o que você precisará fazer é identificar o caminho do arquivo e copiá-lo para dentro da pasta lib. Com exemplo, alguns dos arquivos que precisarão ser movidos são os jboss-logging-3.1.3GA, hibernate-entitymanager-4.3.8.Final e hibernate-jpa-2.1-api-1.0.0.Final.
Trata-se de um problema comum em versões mais antigas da IDE Eclipse, se a sua versão está entre as mais recentes é possível que este problema não ocorra.