O Hibernate é um framework bastante utilizado e disseminado entre os desenvolvedores Java que nos possibilita armazenar e recuperar objetos através do Mapeamento Objeto-Relacional (Object-Relational Mapping - ORM). O Hibernate surgiu no ano de 2001 por iniciativa de Gavin King.

O novo Hibernate 4 foi lançado e trouxe diversas melhorias que facilitam e melhoram a vida dos desenvolvedores. Entre as novidades temos a introdução do ServiceRegistry que ele é uma nova forma do Hibernate gerenciar os seus serviços, pois Services são classes que oferecem muitas funcionalidades ao Hibernate como ClassLoader, ConnectionProvider (conexão com um BD), e muitas outras funcionalidades. Portanto, agora todos os serviços possuem uma interface, facilitando modificações pelo desenvolvedor na forma como o Hibernate realiza algumas funcionalidades. Dessa forma, nossas classes precisariam apenas implementar a interface de serviço do Hibernate. Também temos a introdução do Multi-Tenancy, melhorias na performance do Hibernate e diversas outras melhorias e adições que fazem do Hibernate um framework ainda melhor.

No restante do artigo criaremos uma simples aplicação Web que apenas lista e insere dados na base de dados trazendo algumas melhorias introduzas na recente versão do Hibernate.

Criando uma Aplicação com Hibernate 4

O Hibernate está disponível no SourceForge nos formatos ZIP e TGZ. Essa versão 4 contém os JARs necessários, documentação, código-fonte e outros utilitários. O download oficial está disponível no link http://sourceforge.net/projects/hibernate/files/hibernate4/.

Após fazer o download do Hibernate 4 descompacte os arquivos numa pasta para que possamos copiar os JARs da pasta lib/required.

A pasta lib/required contém todos os JARs requeridos pelo Hibernate. Todos os JARs presentes neste diretório devem ser incluídos no classpath do nosso projeto.

Dado que já baixamos o Hibernate e temos uma base de dados PostgreSQL 8.4 devidamente criado e com uma tabela chamada teste com três colunas: id (tipo: serial), nome (tipo: text), senha (tipo: text), e uma chave primária criada para id.

Abra o Eclipse e clique com o botão direito do mouse e clique em New e Other como indica a Figura 1.

Figura 1. Criando um novo projeto no Eclipse.

Selecione Web e depois Dynamic Web Project como indica a Figura 2.:

Figura 2. Criando um projeto Web.

Na próxima tela (Figura 3)configuramos o nome do projeto como TesteHibernate4, configuramos o Apache tomcat4 e por fim clicamos em Finish.

Figura 3. Configurando o projeto.

Com o projeto criado, agora crie um novo pacote clicando com o botão direito do mouse em cima de src e selecionando “new” e “package” (Figura 4).

Figura 4. Criando um novo pacote.

Configure o pacote como apresentado na Figura 5e clique em “finish”.

Figura 5. Configurando um pacote.

Clique com o botão direito do mouse em cima do pacote e selecione “new” e “class”. Dê o nome da classe de “TesteEntity” e coloque o código apresentado na Listagem 1.

Listagem 1. Classe de teste mapeada.


  Package teste.hibernate;
   
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.Id;
  import javax.persistence.Table;
   
  import org.hibernate.annotations.GenericGenerator;
   
  @Entity
  @Table(name="teste", schema="public")
  public class TesteEntity {
   
         @Id
         @GeneratedValue(generator="increment")
         @GenericGenerator(name="increment", strategy = "increment")
         private int id;
         
         @Column
         private String usuario;
         
         @Column
         private String senha;
         
         
         public int getId() {
               return id;
         }
         public void setId(int id) {
               this.id = id;
         }
         public String getUsuario() {
               return usuario;
         }
         public void setUsuario(String usuario) {
               this.usuario = usuario;
         }
         public String getSenha() {
               return senha;
         }
         public void setSenha(String senha) {
               this.senha = senha;
         }
  }

Dentro deste mesmo pacote criamos o arquivo hibernate.cfg.xml, conforme a Listagem 2.

Listagem 2. Arquivo de mapeamento do Hibernate.


  <?xml version="1.0" encoding="utf-8"?>
  <!DOCTYPE hibernate-configuration SYSTEM 
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  <hibernate-configuration>
         <session-factory>
               <property name="hibernate.connection.driver_class"
               >org.postgresql.Driver</property>
               <property name="hibernate.connection.url"
                 >jdbc:postgresql://localhost:5432/banco_teste
               </property>
               <property name="hibernate.connection.username"
               >userbd</property>
               <property name="hibernate.dialect">
                 org.hibernate.dialect.HSQLDialect</property>
               <property name="connection.password"
               >senhabd</property>
               <property name="show_sql">true
               </property>
   
               <mapping class="teste.hibernate.TesteEntity"/>
   
         </session-factory>
  </hibernate-configuration>

Agora devemos criar uma classe que irá inserir um dado no Banco de dados e consultar o dado inserido. Veja a Listagem 3.

Listagem 3. Inserindo dados e consultando na Base de Dados.


  package teste.hibernate;
  import java.util.List;
   
  import org.hibernate.HibernateException;
  import org.hibernate.Session;
  import org.hibernate.SessionFactory;
  import org.hibernate.cfg.Configuration;
  import org.hibernate.service.ServiceRegistry;
  import org.hibernate.service.ServiceRegistryBuilder;
   
   
  public class TesteHibernate {
   
         
         public void lista() {             
               List<TesteEntity> list= null;
   
               Configuration conf = new Configuration();
               conf.configure();
               ServiceRegistry serviceRegistry =  
                new ServiceRegistryBuilder().applySettings
                (conf.getProperties()).buildServiceRegistry();        
               SessionFactory sessionFactory = 
                 conf.buildSessionFactory(serviceRegistry);
   
               
               Session session = sessionFactory.openSession();
               
               try {
                      session.beginTransaction();
                      list = session.createQuery
                        ("select t from TesteEntity t").list();
                      session.getTransaction().commit();
                      
                      for (TesteEntity teste : list) {
                             System.out.println
                              ("Usuario: " + teste.getUsuario());
                      }
   
               } catch ( HibernateException e ) {
                      if ( session.getTransaction() != null )
                             session.getTransaction().rollback();
               } finally {
                      session.close();
               }
                             
         }
         
         public void insere() {            
         
               Configuration conf = new Configuration();
               conf.configure();
               ServiceRegistry serviceRegistry = 
                new ServiceRegistryBuilder().applySettings
                 (conf.getProperties()).buildServiceRegistry();        
               SessionFactory sessionFactory = 
                 conf.buildSessionFactory(serviceRegistry);
               
               Session session = sessionFactory.openSession();
               
               try {
                      session.beginTransaction();
                      
                      TesteEntity t = new TesteEntity();
                      t.setSenha("teste senha");
                      t.setUsuario("teste user");
                      
                      //salva usuario criado acima
                      session.save(t);
                      
                      //comita a transacao
                      session.getTransaction().commit();
   
               } catch ( HibernateException e ) {
                      if ( session.getTransaction() != null )
                             session.getTransaction().rollback();
                } finally {
                      session.close();
               }
                      
         }
  }

Por fim, a JSP apresentada na Listagem 4apenas chama os métodos criados anteriormente:

Listagem 4. Chamando os métodos criados


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@page import="br.com.portaldoconteudo.teste.TesteHibernate"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; 
      charset=ISO-8859-1">
     <title>Página de Teste com Hibernate 4</title>
  </head>
  <body>
    Teste de Inserção e Listagem de Dados no Console
    <br/><br/>
 
    <%
 
      TesteHibernate testeHibernate = new TesteHibernate();
 
      testeHibernate.insere();
 
      testeHibernate.lista();
 
    %>
 
  </body>
                                                
</html>

As informações serão exibidas no console do eclipse. Poderíamos ter feito com swing, porém como alguns leitores pediram um projeto Web para ver a distribuição dos arquivos e como criar um projeto web com o Hibernate fizemos um projeto dinâmico. No entanto, nada impede que o projeto seja desktop. Também poderemos incrementar o exemplo com a utilização de Servlets. Como você faria o código acima inserindo dados e depois solicitando uma listagem e exibindo esses dados na tela para o usuário? Fica como um exercício para o leitor e no próximo artigo traremos o exemplo com esses incrementos e com log e auditoria que também sofreram modificações no Hibernate 4.

Com isso, neste artigo vimos como criar uma aplicação web utilizando tomcat, eclipse e o novo Hibernate 4. Verificamos novidades como o ServiceRegistry que é a alteração mais profunda nesta versão do Hibernate. Também podemos verificar que não houve alterações nas regras de mapeamento e no arquivo de mapeamento que pode permanecer com a versão 3.0 sem causar problemas.

Bibliografia

[1]Hibernate - JBoss Community, disponível em www.hibernate.org/

[2]Documentação de Referência Hibernate, disponível em https://docs.jboss.org/hibernate/core/3.6/reference/pt-BR/html/index.htmlhttp://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html

[3] Introdução ao Hibernate, disponível em http://hibernate.javabeat.net/articles/2007/05/hibernate-orm-framework-introduction/

[4] Jeff Linwood and Dave Minter. An introduction to persistence using Hibernate 3.5, Second Edition. Apress.

[5] Steve Perkins. Hibernate Search by Example: Explore the Hibernate Search system and use its extraordinary search features in your own applications. Packt Publishing.