Hibernate Framework: Inserindo e listando dados em Java

Veja neste artigo uma aplicação de exemplo utilizando algumas das novidades do Hibernate 4. Veja como criar uma aplicação para inserir e listar dados em um banco de dados.

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.

Artigos relacionados