Back-End

5 out, 2010

Praticando Hibernate + JSF + MySQL

Publicidade

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" % >;
< %@ 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 {
private String nome;
private int id;
public int getId() {
return id;}
public void setId(int id) {
this.id = id;}
public String getNome() {
return nome;}
public void setNome(String nome) {
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;
import br.com.dao.InterfaceDAO;
import br.com.dao.VisitanteDAO;
//classe controladora JSF
public class VisitanteControler {
private Visitante visitante;
public VisitanteControler() {
visitante = new Visitante(); }
public Visitante getVisitante() {
return visitante; }
public void setVisitante(Visitante visitante) {
this.visitante = visitante;}
public String salvar(){
InterfaceDAO visitantedao = new VisitanteDAO();
visitantedao.salvar(visitante);
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 -- >

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

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

< !-- ARQUIVO DE QUE FAZ O MAPEAMENTO COM BD/TABELA -->

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

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


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

06. Atualize o arquivo VisitanteDAO.java.

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

07. Seu arquivo InterfaceDAO.java deve estar assim:

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

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

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

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

 < %@ taglib uri="http://java.sun.com/jsf/html" prefix="h" % >;
< %@ 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!