Nas consultas foi utilizada a API Criteria, uma forma diferente de fazer o “select” quando utilizamos orientação objetos e não objetos relacionais. Outra forma que pode ser utilizada é o HQL, um dialeto SQL para o Hibernate, uma consulta muito parecida com o SQL, porém se trabalha com objetos e seus atributos e não com tabelas e colunas.
Nossa classe Contato terá como atributos os campos da tabela Contatos, mapeados em forma de anotações. Através das anotações podemos passar todas as informações que uma coluna teria, como o tipo de dado, tamanho, nome, entre outros.
Criamos a classe GenericDao para ser herdadas pelos demais DAO’s, assim, vamos agora criar a classe ContatoDao, onde estarão os métodos mais específicos da classe. Veja na listagem 6.
Veja que utilizamos herança nesta classe, herdando os métodos criados na classe GenericDao. Nossos métodos salvar(), alterar() e excluir() não possuem mais a criação do SQL que será executado no banco de dados, como no artigo anterior, e sim uma chamada ao método da classe GenericDao e lá os métodos do EntityManager farão o trabalho.
Pouquíssimas alterações serão feitas na classe controller em relação a classe controller do artigo anterior. Apenas foram alterados o nome do pacote do projeto, as exceções que antes eram SQLException para Exception e no método listaContatos() o retorno foi alterado de dao.findContatos() para dao.findAll(), já que agora temos um método genérico e não exclusivo para contatos.
Essa é uma das vantagens do padrão MVC, nós podemos modificar parte do projeto sem que influencie drasticamente em outros pontos dele.
A classe ContatoFrame sofreu alterações mínimas, que foram apenas, alterar as exceções SQLException por exceções do tipo Exception. Faça essa alteração e nos casos dos métodos que tenham dois tipos de exceções, deixe a Exception no último catch{}.