Dev (Back & Front)ARTIGO

Praticando Hibernate + JSF + MySQL

Opa! Tudo bom, pessoal?

Resolvi escrever um artigo falando sobre como
criar uma persistência de dados usando Hibernate no Eclipse, tendo o
framework JSF como view. Vejam que não é tão complicado assim, o
chato é configurar o Hibernate no Eclipse.

Let´s
go…

Sobre
a aplicação

Bem, a
ideia aqui é apresentar a vantagem de usar o framework Hibernate
para persistência de dados, então vamos fazer uma aplicação bem
simples e ficaremos mais focados na parte do Hibernate. A nossa
aplicação tem a função do nome de um visitante em uma base de
dados (MySQL).

Sobre
o Hibernate, para não duplicar o que já tem na net, lá vai a
“reutilização da informação” 😉 – O
que é hibernate?

Download
Hibernate
– ponto importante, nesse final de semana fiquei
tentando colocar a última versão do hibernate para funcionar, mas não tive sucesso. A última versão veio faltando uns .jars e até
agora não descobrir o motivo, estou pesquisando e verificando se não
é um problema local na hora de descompactar o pacote. Em função
disso, usei uma versão mais antiga, a 3.2.1.ga, e no link anterior
disponibilizei apenas os .jars necessários.

Download
Hibernate versão 3.3.2.GA
– essa é a ultima versão que
consta no site Hibernate.org no momento em que escrevo o artigo.
Porém, não a estamos usando.

Requisitos:

  • Eclipse
    Galileo (versão em uso para este artigo)
  • JDK
    1.5
  • Hibernate
    3.2.1 (versão em uso para este artigo)
  • Jboos
    tools no Eclipse
  • MySql
    (vamos considerar que criou o DataBase e Table no BD)
  • TomCat
    5.5/Superior

Alguns
problemas:

Para
adiantar, identifiquei alguns “problemas” que podem tirar você
do sério.

Quando você cria um Library no Eclipse e o adiciona ao seu projeto, os arquivos .jars não vão para a pasta
lib. E, se você tentar adicionar .jars diretamente, também
não vai parar no diretório lib do projeto. Não sei por que o
Eclipse não faz isso, desde o dynamic
web project
há esse problema.

Em função disso, é
necessário copiar os .jars do Hibernate para a pasta lib
do seu projeto. Abaixo, uma imagem dos .jars necessário para que o
hibernate funcione. Não se esqueça do arquivo .jar do MySql.

Iniciando

01. Crie um projeto JSF PROJECT

02. Agora crie uma página index.jsp com o código a seguir

03. Crie uma pagina sucesso.jsp com o código abaixo.

< %@ taglib uri="http://java.sun.com/jsf/html" prefix="h" % >;<br />< %@ taglib uri="http://java.sun.com/jsf/core" prefix="f" % >;

04. Crie uma estrutura conforme abaixo no seu projeto. A seguir vamos apresentar os codes de cada classe, não se preocupe.


05. Agora vamos criar os arquivos de configuração e conexão com o BD via Hibernate. Para isso, crie dois arquivos no formato .xml (hibernate.cfg.xml e visitantes.hbm.xml), estes devem estar dentro de Source. Sua estrutura deve estar conforme abaixo:


Pronto, terminamos a configuração do ambiente de desenvolvimento, agora vamos à parte mais interessante.

Desenvolvimento

01. Precisamos criar um Bean para nossa aplicação, então, abra o arquivo Visitante.java e deixe conforme o code a seguir:

public class Visitante {<br />private String nome;<br />private int id;<br />public int getId() {<br />return id;}<br />public void setId(int id) {<br />this.id = id;}<br />public String getNome() {<br />return nome;}<br />public void setNome(String nome) {<br />this.nome = nome;}}

02. Agora vamos criar o controlador JSF. Para isso, abra o arquivo VisitanteControler.java e deixe conforme o code abaixo:

import br.com.bean.Visitante;<br />import br.com.dao.InterfaceDAO;<br />import br.com.dao.VisitanteDAO;<br />//classe controladora JSF<br />public class VisitanteControler {<br />private Visitante visitante;<br />public VisitanteControler() {<br />visitante  = new Visitante();    }<br />public Visitante getVisitante() {<br />return visitante;    }<br />public void setVisitante(Visitante visitante) {<br />this.visitante = visitante;}<br />public String salvar(){<br />InterfaceDAO visitantedao = new VisitanteDAO();<br />visitantedao.salvar(visitante);<br />return "salvar";}}

03. O objetivo agora é configurar e fazer o mapeamento com Hibernate. Para isso, atualize o arquivo hibernate.cfg.xml conforme o código a seguir:

< !-- CONFIGURANDO O HIbernate -- ><br /><br />org.gjt.mm.mysql.Driver<br />jdbc:mysql://localhost/livraria<br />camilo<br />bahia<br />< !-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD  -- ><br />org.hibernate.dialect.MySQLDialect<br /> <!-- pega a tabela  -->

04. Agora atualize o arquivo visitantes.hbm.xml.

< !-- ARQUIVO DE QUE FAZ O MAPEAMENTO COM BD/TABELA --><br /><br />< hibernate-mapping><br />< !-- INFORMANDO O LOCAL DO BEAN E  O NOME DA TABELA NO BD -- ><br /> < class name="br.com.bean.Visitante" table="visitante"><br /> < !-- CHAVE PRIMARIA DA TABELA  -- ><br />  <id column="id" name="id" type="integer"><br />   <generator class="assigned"/><br />  </id><br />  <property column="nome" name="nome" type="string"/><br /> </class><br /></hibernate-mapping>

05. Abra o arquivo ConexaoHi.java e insira os códigos a seguir:

<br />import org.hibernate.Session;<br />import org.hibernate.SessionFactory;<br />import org.hibernate.cfg.Configuration;<br />//classe que conecta ao Hibernate<br />public class ConexaoHi {<br />//variavel que armazena os mapeamentos e configuracoes do Hibernate<br />private static final SessionFactory sessionFactory;<br />private static final ThreadLocal threadlocal = new ThreadLocal();<br />static{<br />try{<br />sessionFactory = new Configuration()<br />.configure("hibernate.cfg.xml")<br />.buildSessionFactory();<br />/*recebemos a configuracao do arquivo hibernate.cfg.xml que possui<br />*dados da conexao<br />* chamamos o metodo buildSessionFactory que retorna um objeto<br />* session, que estabelece uma sessao de comunicacao com o BD<br />* atraves de uma conexao JDBC */<br />}catch (Throwable e) {<br />throw new ExceptionInInitializerError(e);}<br />}<br />/* esse metodo associada cada sessao a um objeto, permitindo que<br /> * cada sessao abra um processo concorrente  */<br />public static Session getInstance(){<br />Session session = (Session) threadlocal.get();<br />session = sessionFactory.openSession();<br />threadlocal.set(session);<br />return session;}}

06. Atualize o arquivo VisitanteDAO.java.

import org.hibernate.HibernateException;<br />import org.hibernate.Session;<br />import org.hibernate.Transaction;<br />import br.com.bean.Visitante;<br />import br.com.util.ConexaoHi;<br />//com hibernate<br />public class VisitanteDAO implements InterfaceDAO {<br />private Session session;<br />//metodo responsavel por salvar os dados no BD<br />public void salvar(Visitante visitante){<br />session = ConexaoHi.getInstance();//cria uma sessao<br />Transaction tx = null; //permite transacoes no BD<br />try{<br />tx = session.beginTransaction();<br />session.save(visitante);//grava no BD<br />tx.commit();//transacao efetuada<br />}catch (HibernateException e) {<br />System.out.println("deu merda aqui");<br />e.printStackTrace();<br />//tem o objetivo de desfazer a transcao em caso de erro<br />tx.rollback();<br />}finally{<br />session.close();}}}

07. Seu arquivo InterfaceDAO.java deve estar assim:

import br.com.bean.Visitante;<br />public interface InterfaceDAO {<br />public abstract void salvar(Visitante visitante);<br />}

08. Não podemos nos esquecer de configurar o arquivo faces-config.xml. Para isso, deixe conforme o code a seguir :

  <managed-bean><br />  <managed-bean-name>visitanteControler</managed-bean-name><br />  <managed-bean-class>br.com.controller.VisitanteControler</managed-bean-class><br />  <managed-bean-scope>session</managed-bean-scope><br /> </managed-bean><br /> <navigation-rule><br />  <from-view-id>/form.jsp</from-view-id><br />  <navigation-case><br />   <from-outcome>salvar</from-outcome><br />   <to-view-id>/sucesso.jsp</to-view-id><br />  </navigation-case><br /> </navigation-rule><br /></faces-config>

09. Agora atualize os arquivos .jsp, começando pelo form.jsp.

 < %@ taglib uri="http://java.sun.com/jsf/html" prefix="h" % >;<br />< %@ taglib uri="http://java.sun.com/jsf/core" prefix="f" % >

Pronto, terminamos o desenvolvimento, chegou a hora de testar.

Testando

01. Para testar a aplicação, clique com o botão direto em cima do projeto e escolha Run As Run on Server.

02. Aguarde que o browser interno do eclipse seja carregado (por padrão será ele). Você verá a seguinte tela:


03. Cadastre um visitante.


04. Verificando o visitante no BD.


Fico por aqui e espero que vocês tenham gostado do artigo.

Ficou um pouco longo, mas eu espero tenha sido produtivo e que vocês tenham conseguido ver a essência e as vantagens de usar um framework como Hibernate para persistência de dados.

Aproveitando este post, fica aqui um presente para os leitores do iMasters que estão se preparando para tirar a certificação SCJP. Recentemente publiquei o livro Guia do Exame SCJP (veja aqui a resenha) e você que leu esse artigo acabou de ganhar um desconto de 30% para comprá-lo diretamente no site da editora Ciência Moderna! Basta usar o cupom V00014. O valor do livro é R$ 49,00 e, com o desconto, ele fica por R$ 34,30. Aproveite para estudar bastante, sem correr o risco de ficar com o orçamento apertado! 

Abraços e até o próximo!

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&amp;T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil