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.