Dando continuidade ao tema hibernate, neste post, vamos traçar um paralelo entre o mapeamento O/R com e sem a utilização do hibernate, mostrando os principais ganhos no uso desse framework.
Quem já trabalha ou trabalhou com java, sabe que fazer o mapeamento de objetos aos ResultSets do JDBC, com as tuplas obtidas de uma consulta em um banco de dados, é um trabalho repetitivo, criterioso e que gera muita codificação. O trecho de código abaixo dá um exemplo disso:

Observamos que para cada elemento que será retornado do BD, uma nova instancia do objeto é criada, preenchida e adicionada a uma lista (padrão comumente utilizado em projetos). Por fim uma nova instância da coleção é criada e recebe a lista preenchida para ser retornada para quem consumiu o método. Lembrando que o consumidor do método terá que extrair dessa coleção os objetos , fazer o casting para o objeto desejado, para em seguida acessar os atributos desejados.
No trecho abaixo, agora com o Hibernate, veja como o mesmo método foi implementado:

Observamos agora, algumas das importantes características do código utilizando Hibernate. Na linha 1, inicia-se uma transação: é aconselhável sempre se trabalhar com esse conceito permitindo o trabalho de transações integradas com o gerenciador de BD; Na linha 2, obtem-se uma sessão gerenciada pela classe utilitária HibernateUtil; Na linha 3, o objeto Criteria, permite mapear os atributos de uma classe que o engine do hibernate irá converter para uma HQL (Hibernate Query Language), semelhante a um comando SQL. Esse ponto é especial pois deixamos de trabalhar com as tabelas, ou seja, sempre nos referimos às intâncias dos objetos e seus atributos na hora de criar consultas especializadas.
Na linha 4, cria-se dinamicamente uma ordenação para o resultado da consulta, utilizando-se o método addOrder e o objeto Order ordenando ascendentemente pelo atributo da classe “descrição”; Na linha 5, a consulta é efetivamente executada, retornando uma lista de objetos do tipo da classe passada no Criteria (Produto).;Na linha 6, a sessão com o banco é liberada e por fim na linha 7, a transação é “comitada”.
Por fim, nota-se que não foi necessário fazer o trabalho de mapeamento dos dados da base para os objetos java, porque o hibernate faz isso de forma “quase automática”. E isso não é mágica, existem arquivos de configuração e mapeamento que fazem isso para o desenvolvedor.
O arquivo produto.hbm.xml(abaixo), que mapeia os atributos da classe aos atributos da tabela do BD. Alem dos arquivos de hibernate.properties e hibernate.cfg.xml que contem respectivamente as informações de acesso ao BD (usuário, senha, esquema, etc) e configurações adicionais do hibernate.

No próximo e ultimo post falaremos um pouco mais sobre essas funcionalidades, mais especificamente, sobre as relações entre os objetos e suas cardinalidades e dicas de literatura para aprofundamento dos conhecimentos.
Até lá !
24 julho, 2007 at 12:59 am
Grande Berg,
O que posso dizer… Esta seqüência de publicações sobre Hibernate realmente nos dão orientações e nos atualizam de forma simples, com exemplos…
Como a tecnologia não faz parte do meu dia-a-dia, estou me atualizando de forma rápida.
Parabéns!
24 julho, 2007 at 11:41 am
Valeu cara,
Esse é o objetivo mesmo…só gostaria de ter mais tempo para fazer melhor.