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…