Powered by Max Banner Ads 
Home > BD, Hibernate, JSF > JSF + Hibernate + MySql no Eclipse

JSF + Hibernate + MySql no Eclipse

stressprogrammer

opa!Pessoal!! Cansado de fazer um CRUD manualmente usando o padrão DAO? É porque você precisa conhecer o Hibernate.
No post de hoje vamos criar uma persistencia de dados usando framework Hibernate no Eclipse tendo o framework JSF como view. Vejam que não é tão complicado assim, o chato é configurar o hibernate no Eclipse, ao contrário do NetBeans que ja traz tudo pre-configurado e não precisa fazer muita coisa para Hibernate funcionar. Mas, como todos nos sabemos que bons programadores,desenvolvedores, etc. não ficam refém das pre-configurações de uma IDE. E isso é uma vantagem do velho e famoso Eclipse, por não contribuir para esse fim, ou seja, você usa o Eclipse por gostar dele e nao por ele fazer as coisas por você ;) .
Lets go…

Sobre Aplicação

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

Sobre o Hibernate – para não duplicar o que ja 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 ultima versão do hibernate para funcionar porem nao tive sucesso, com a ultima 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 acima disponibilizei apenas os .jars do hibernate da versao que está sendo utilizado nesse post.

Download Hibernate versão 3.3.2.GA – essa eh a ultima versão que consta no site Hibernate.org neste momento que escrevo o post. Porém, nao estamos usando ela.

Requisitos:
Eclipse Galileo (versão em uso para este post)
JDK 1.5
Hibernate 3.2.1 (versão em uso para este post)
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 add este ao seu projeto, os arquivos .jars não vão para a pasta lib. E se vc tentar adicionar .jars diretamente ao projeto este também não vai parar no diretorio lib do projeto. Não sei porque o Eclipse não faz isso, desde do dynamic web project há este 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 esqueça do arquivo .jar do MySql na pasta lib do projeto.

Iniciando

1.crie um projeto JSF PROJECT
2.Agora crie uma página index.jsp com o código a seguir

3.crie uma pagina sucesso.jsp com o código abaixo.

< f:view>

< h:outputText value=“Visitante, cadastrado com sucesso!”/>

< /f:view>

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

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

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

Desenvolvimento
1.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;}}

2.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";}}

3.O objetivo agora é configurar e fazer o mapeamento com Hibernate. Para isso atualize o arquivo hibernate.cfg.xml conforme o codigo a seguir:

    <?xml version=“1.0″ encoding=“UTF-8″?>

<!DOCTYPE hibernate-configuration PUBLIC

“-//Hibernate/Hibernate Configuration DTD 3.0//EN”

“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd” >

<!– CONFIGURANDO O HIbernate –>

<hibernate-configuration>

<session-factory>

<property name=“hibernate.connection.driver_class”>org.gjt.mm.mysql.Driver</property>

<property name=“hibernate.connection.url”>jdbc:mysql://localhost/livraria</property>

<property name=“hibernate.connection.username”>camilo</property>

<property name=“hibernate.connection.password”>integrator</property>

<!– USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD –>

<property name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

<mapping resource=“visitantes.hbm.xml”/> <!– pega a tabela –>

</session-factory>

</hibernate-configuration>

 

4.Agora atualize o arquivo visitantes.hbm.xml

< 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>

5.Abra o arquivo ConexaoHi.java e insira os codigos 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;}}

6.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();}}}

7.Seu arquivo InterfaceDAO.java deve estar assim:

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

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

  visitanteControler
  br.com.controller.VisitanteControler
  session
 
  /form.jsp
 
   salvar
   /sucesso.jsp

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

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

Testando
1.para testar aplicação clique com o botão direto em cima do projeto e escolha Run As – Run on Server.
2.Aguarde o browser interno do eclipse seja carregado (por padrão será ele). E você verá a seguinte tela:

3.Cadastre um visitante


4.Verificando visitante no BD


Vou ficando por aqui e espero que vocês tenham gostado do post. Um pouco grande, porem bastante produtivo. Vejam a essencia e as vantagens de usar um framework como Hibernate para persistência de dados.
Abracos e até o proximo post…

Related Posts with Thumbnails
  1. adriano
    December 30th, 2009 at 16:47 | #1

    Gostei muito. Bem direto.

    Vou seguir o tutorial para iniciar com hibernate.

    Obrigado!!!

  2. camilolopes
    December 30th, 2009 at 20:21 | #2

    opa! Adriano,

    obrigado! ;)

  3. rafa
    May 26th, 2010 at 18:12 | #3

    legal…vou testar aqui vlwsssssssss

  4. Renato
    June 11th, 2010 at 19:28 | #4

    Olá Camilo. Muito bom seu tutorial. Vc tem os arquivos JSP e os JSF para mim ver como ficou? Abraços e Obrigado

  5. camilolopes
    June 11th, 2010 at 20:14 | #5

    olá renato,
    vou dar uma procurada hehehe, espero que sim, me envia um email cobrando que eu olho. :) .
    abracos,

  6. Renato
    June 11th, 2010 at 22:17 | #6

    @camilolopes
    BLZ! RISOS!!!

  7. Renato Vieira
    July 18th, 2010 at 21:12 | #7

    Olá Camilo, muito bom seu exemplo, ajudou muito em meus estudos. Só tenho uma dúvida. Caso tenha uma table na pagina exibindo os dados do cadastro, após SALVAR ao inves de ir para /sucesso.jsp como faço para dar um refresh na página e mostrar o novo registro inserido? Estou utilizado JSF+Hibernate+MySQL.
    Obrigado Amigo.

  8. camilolopes
    July 18th, 2010 at 21:59 | #8

    olá renato,
    obrigado pelo feedback. ao inves de você mandar para a pagina de sucesso envia direto para a pagina de exibir. e se for na mesma pagina vc dar uma pesquisa sobre o uso de templates jsf facelets que vc vai ver como implementar, aqui no blog nao postei nada ainda a respeito.
    abracos! e bons códigos.

  9. August 22nd, 2010 at 16:30 | #9

    Ola Camilo, gostei do post!

    Gostaria de tirar algumas duvidas.

    Como faria para deixar o open, commit e rollback automatico todas as vezes que chamar o metodo do hibernate?

    Vi que para mapear as tabelas, foram usadas xml, mas usando annotarion, da no mesmo? Pois prefiro fazer com annotation do que xml`s.

    Valeu ai!

  10. camilolopes
    September 3rd, 2010 at 03:25 | #10

    opa tiago,
    acho que em alguns posts meus de hibernate vc vai encontrar a solucao para o que precisa referente ao deixar os metodos do hibernate “automatico”, no momento eu nao tenho nada para ti passar pq nao estou no brasil e nao trouxe meu laptop que uso para TI. hehe.
    A respeito do mapeamento, isso varia muito um programador que usa o hibernate como persistencia ele precisa saber tanto fazer o mapeamento com xml quanto usar annotations, concerteza, usar annotations é bem melhor e facilita o desenvolvimento e manutencao, mas lembre-se usar annotations requer java 5 e nem toda aplicacao usa java 5, dai vc terá que dominar o mapeamento, boa parte das vagas que tem disponveis e pedem hibernate, é para sistema legado, entao estar preparado para as duas situacoes é o melhor que vc deveria fazer.
    abracos,

  11. Gustavo
    September 13th, 2010 at 22:28 | #11

    Terrível.
    Os códigos das jsps estão pela metade:
    “9.Agora atualize os arquivos .jsp, começando pelo form.jsp

    ;

    Pronto, terminamos o desenvolvimento, chegou a hora de testar…”

    Não é possível terminar o tutorial.

  12. camilolopes
    September 14th, 2010 at 06:05 | #12

    esse é o problema do usar plugin para formatar codigos, sao horriveis, do nada eles nao identificam o codigo, e mexe no codigo, achando que eh html. aff odeios eles, vou parar de usar para codigos em jsp. so fazem stressar.
    valeu pelo feedback.
    Por falta de sorte sua, qdo foi ler o plugin ja tinha comido o código. Vou atualizar qdo retornar ao brasil, estou sem o codigo fonte aqui.

  13. Jeferson
    March 19th, 2011 at 01:44 | #13

    Opa camilo

    Tentei usar seu exemplo, e obtive muitos erros por conta dos codigos que estao faltando
    estou começando em jsf.

    Você poderia atualizar este post ou me mandar os fontes?

    Desde já agradeço

  1. July 3rd, 2010 at 21:05 | #1
  2. July 19th, 2010 at 09:38 | #2