Por que eu devo ler este artigo:Neste artigo mostraremos como desenvolver uma aplicação Java utilizando Hibernate, MySQL e NetBeans. Aprenderemos de forma básica e simples os principais conceitos relativos ao framework, faremos uma análise geral sobre seu funcionamento, como configurar um ambiente de desenvolvimento e como realizar o mapeamento objeto-relacional, visando preencher a lacuna semântica existente entre as estruturas de tabelas e sua representação através de classes.

Hoje em dia, com a necessidade de desenvolver sistemas cada vez mais complexos e que levem em conta fatores como facilidade de manutenção e reaproveitamento de código, muitos desenvolvedores, durante o processo de análise e desenvolvimento de software, têm optado pelo uso do paradigma de programação orientada a objetos. Por outro lado, o modelo relacional há muito tempo vem sendo o modelo mais aceito e utilizado quando se deseja armazenar dados, se comparado a outros modelos (rede, hierárquico, orientado a objetos e objeto-relacional).

Segundo Bauer e King (2005, p.11), os bancos de dados relacionais estão fortemente presentes no núcleo da empresa moderna, e por serem largamente utilizados em projetos de software orientados a objetos, faz-se necessário um mapeamento entre as tabelas do banco de dados e os objetos da aplicação. A fim de tornar compatível o paradigma da orientação a objetos e o paradigma de entidade e relacionamento, foram desenvolvidos frameworks de mapeamento objeto relacional (Object Relational Mapping – ORM).

O mapeamento objeto relacional surge como uma alternativa para os desenvolvedores de sistemas que não querem abrir mão dos benefícios que a linguagem de programação orientada a objetos possui, e que também sabem que um banco de dados puramente orientado a objetos está longe de conseguir uma boa aceitação no mercado. A ideia por trás do ORM é ter um mecanismo que faça a conversão entre os objetos do sistema e as tabelas do banco de dados relacional.

O framework ORM mais difundido atualmente é o Hibernate. Suas principais vantagens são simplificar a persistência dos dados, permitir que a aplicação permaneça totalmente orientada a objetos e também fazer com que possíveis mudanças na base de dados impliquem em um menor impacto sobre a aplicação, tendo em vista que apenas os objetos relacionados com as tabelas alteradas necessitarão de mudanças. Sendo assim, ficam evidentes as vantagens da adoção do Hibernate no desenvolvimento de sistemas orientados a objetos.

Com base nisso, este artigo visa fazer um estudo sobre o Hibernate, apresentando suas características, seus principais recursos, assim como uma visão geral sobre seu funcionamento e como utilizá-lo em meio à construção de um exemplo simples de sistema de informação que mostre de forma prática como desenvolver uma aplicação orientada a objetos com acesso a um banco de dados relacional. Para tanto, serão empregados à linguagem de programação Java, o ambiente de desenvolvimento NetBeans e o sistema de gerenciamento de banco de dados (SGBD) MySQL. O Hibernate será usado como a camada de persistência que deverá fazer a interface entre a aplicação e o MySQL.

Mapeamento objeto relacional

Segundo Bauer e King (2005, p.23), mapeamento objeto relacional significa “persistir de maneira automática e transparente os objetos de um aplicativo para tabelas em um banco de dados relacional. Em essência, transformar dados de uma representação para a outra”. Se o banco de dados possui uma tabela chamada Pedido, a aplicação possuirá, provavelmente, uma classe denominada Pedido. Essa classe definirá atributos, que serão usados para receber e alterar os dados dos campos das tabelas, além de métodos para calcular os juros, valor total do pedido, entre outras operações relacionadas à tabela.

No desenvolvimento de um sistema, muitas vezes o programador dedica uma parte considerável do seu tempo construindo comandos em linguagem de banco de dados para realizar o armazenamento dos dados no banco de dados relacional. A presença de uma camada intermediária de mapeamento objeto relacional facilita muito a vida do programador, pois ela é responsável por traduzir as estruturas e operações do sistema orientado a objetos para a estrutura existente no banco de dados relacional.

A persistência diz respeito ao armazenamento de dados que estão em meio volátil, como a memória RAM, para dispositivos de memória secundária, como o disco rígido. Em outras palavras, consiste em manter os dados em meio físico recuperável, como um banco de dados ou um arquivo, de modo a garantir a permanência das informações de um determinado estado de um objeto lógico.

Como vantagens, o mapeamento objeto relacional proporciona:

  • Produtividade: com a eliminação dos códigos SQL no código-fonte, as classes passam a ser mais simples e com isso o sistema é desenvolvido em um tempo menor;
  • Manutenibilidade: tendo em vista que o número de linhas de código do sistema diminui, o trabalho de manutenção também será menor;
  • Desempenho: o tempo economizado no desenvolvimento pode ser dedicado a implementar melhorias no sistema;
  • Independência de fornecedor: Abstrai do aplicativo o sistema de banco de dados e oferece maior portabilidade. Assim, o programador pode mudar de SGBD sem ter que realizar alterações no software.

O objetivo do ORM é construir um código mais uniforme e que utilize de fato as características da linguagem orientada a objetos. Dessa forma, sistemas em que a maior parte da lógica da aplicação encontra-se dentro do banco de dados ou mesmo fazem uso extensivo de stored procedures e triggers não irão se beneficiar do Hibernate, assim como do mapeamento objeto relacional, pois não há necessidade de um modelo de objetos para trabalhar a lógica do sistema. Nesse caso, o ideal seria tirar a lógica de negócio de dentro do banco e transferir para a aplicação.

Hibernate

O Hibernate é uma ferramenta open source de mapeamento objeto relacional para aplicações Java de grande aceitação entre os desenvolvedores. Distribuído com a licença LGPL, foi criado por Gavin King em 2001, sendo, sem dúvida, o framework de persistência de dados mais utilizado, sobretudo por dar suporte a classes desenvolvidas com agregações (aquelas classes que usam outras classes em suas operações), herança, polimorfismo, composições e coleções, por implementar a especificação Java Persistense API (JPA), por não restringir a arquitetura da aplicação e por ser amplamente documentado. Segundo a documentação oficial: “o Hibernate pretende retirar do desenvolvedor cerca de 95% das tarefas mais comuns de persistência de dados”.

Sua principal característica é a transformação das classes em Java para tabelas de dados (e dos tipos de dados Java para os da SQL). O Hibernate gera as chamadas SQL e libera o desenvolvedor do trabalho manual de transformação, mantendo o programa portável para quaisquer bancos de dados SQL.

A partir da versão 5 do Java a configuração do Hibernate passou a ser realizada através de anotações do JPA, deixando de lado os complexos arquivos XML. Anotações são metadados que são adicionados ao código-fonte para descrever características dele e como vantagens possibilitou um código mais intuitivo e mais enxuto.

Quando utilizamos anotações, simplesmente as adicionamos sobre os atributos/métodos de acordo com o que projetamos. Após isso, o Java Runtime Environment (JRE) analisa essas anotações. Para ler as anotações e aplicar as informações de mapeamento, o Hibernate utiliza Reflection. Para mais informações, leia o artigo “Entendendo Anotações”, publicado na Easy Java Magazine 25.

Além de realizar o mapeamento objeto relacional, principal caracter ...

Quer ler esse conteúdo completo? Tenha acesso completo