Tutorial hibernate fase 1

Caros amigos,

Depois de um bom tempo correndo atrás de todas as dicas sobre Hibernate, consegui fazer uma aplicação funcionar, primeiro numa aplicação cliente/servidor e depois no ambiente web utilizando o TomCat.

Ferramentas utilizadas:

Java (jdk-1_5_0_06-windows-i586-p)
Eclipse (lomboz)
TomCat (jakarta-tomcat-5.5.10)
Hibernate 3.02
MySql 4.01

Vamos criar um novo projeto:
Clicar em File | new | project | TomCat project
Informe o nome: "SeuProjeto"
Em project contents, desmarque a opção “Use default”, clique em Browse e vá até a pasta webapps que fica dentro da pasta onde o TomCat foi instalado. Chegando nela, clique em “Criar nova pasta”, informe o nome dela “SeuProjeto” e clique direto em Finish.

Se voce clicar em Window | Show View | Navigator

O projeto deverá ter esta estrutura:

SeuProjeto
   WEB-INF
     classes
     lib
     src
   work

O grande problema para fazer funcionar o Hibernate é a configuração das pastas, saber quem é quem e onde colocar…

Baixe o Hibernate 3.02 e descompacte-o em alguma pasta no seu computador
Pegue tambem o drive do Mysql (mysql-connector-java-3.1.12-bin.jar) e coloque-o na pasta lib Vamos distribuir os arquivos:
O arquivo hibernate3.jar coloque-o na pasta razi do projeto (SeuProjeto)

Sei que não precisamos de todos mas vamos pecar por excesso:
Pegue todos os arquivos .jar do hibernate, juntamente com driver MySql e coloque-os na pasta lib

Depois você poderá fazer uma limpeza, retirando alguns mas sempre lembrando de testar a aplicação…

Vamos informar ao projeto que existem novos JARs
Com o projeto selecionado aceese o Menu clicando em:
Project | properties | java Build Pach | na aba Libraries | no botão ADD JARs
Serão exibidas as pasta do seu projeto, localize as pastas onde estão os arquivos JAR´s, selecione-os e clique em OK.

Peque os arquivos hibernate.properties e log4j.properties e coloque-os na pasta classes do projeto

Abra o hibernate.properties com algum editor (notepad) e altere os parametros de conformidade com a configuração da sua conexão com a base de dados (é moleza…mas extremamente importante, sem isto jamais o sistema encontrará a base de dados)
É algo parecido com isto:

hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost:3306/SeuProjeto
hibernate.connection.username = usuario
hibernate.connection.password = senha

Importante: Todos arquivos criados a partir do tutorial, salvar na pasta src
Numa segunda fase, trabalhando com uma estrutura de camadas (apresentação, negócio e dados) informarei onde cada arquivo deverá ficar, por padrão.

Criando de classe Usuario, UsuarioDAO e mapeamento da classe:

Criar o arquivo conforme abaixo e salvar como Usuario.java

public class Usuario {
	private String usCod;
	private String usSenha;
	private String usNome;
	private String usEmail;

	public Usuario(){
	}		 

	public Usuario(String usCod, String usSenha, String usNome, String usEmail) {
		this.setUsCod(usCod);
		this.setUsSenha(usSenha);
		this.setUsNome(usNome);
		this.setUsEmail(usEmail);
	}

//... IMPORTANTE: colocar os métodos GETs e SETs... 

}

Vamos criar a Classe UsuarioDAO, responsavel pela conexao com a base de dados, salve-a como UsuarioDAO.java

import java.util.List;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Expression;

public class UsuarioDAO{
	
	private SessionFactory factory;
	
	public UsuarioDAO() throws Exception{
		factory = new Configuration().addClass(Usuario.class).buildSessionFactory();
		
	}     
	
	public void UsInserir(Usuario us) throws Exception {
		Session session = factory.openSession();
		session.save(us);
		session.flush();
		session.close();
	}
	
	public void UsAlterar(Usuario us) throws Exception {
		Session session = factory.openSession();
		session.update(us);
		session.flush();
		session.close();
	}
	public void UsExcluir(Usuario us) throws Exception {
		Session session = factory.openSession();
		session.delete(us);
		session.flush();
		session.close();
	}
}

Criando o mapeamento da classe para o Hibernate:

Criar o arquivo com os dados abaixo e salvar como Usuario.hbm.xml. Ele deverá ficar na mesma pasta do Usuario.java

Nota: O arquivo abaixo é um xml e para funcionar, retire o espaço que existe entre o sinal < e a linha de comando. Ele foi inserido para que o browser não interpretasse como tal.

< ?xml version="1.0"?>
< !DOCTYPE hibernate-mapping PUBLIC "-//Hibernate Mapping DTD 3.0//EN" 
"hibernate-mapping-3.0.dtd">

< hibernate-mapping>
   < class name="Usuario" table="tb_usuarios">
       < id name="UsCod"  column="USCOD"  type="string">
            < generator class="assigned"/>
        < /id>
        < property name="UsSenha" column="USSENHA" type="string"/>
        < property name="UsNome" column="USNOME" type="string"/>
        < property name="UsEmail" column="USEMAIL" type="string"/>
    < /class>
< /hibernate-mapping>

Verifique que este xml será validado pelo arquivo hibernate-mapping-3.0.dtd.
Como voce ainda não tem este arquivo em sua máquina, faça uma busca rápida no professor google com o texto “hibernate-mapping-3.0.dtd” deverão surgir alguns links deste arquivo, quando voce clicar ele abrirá como um arquivo texto, peque o conteúdo e salve com o nome acima dentro da pasta raiz do seu projeto, no nosso caso, na pasta SeuProjeto.
Este recurso evita que o sistema não encontre o validador quando voce estiver rodando a plicação sem uma conexao com a web.

Caso voce não tenha criado a tabela na base de dados este script deverá criar a tabela.
Abra o admin do mysql e, dentro de uma nova query, cole o texto abaixo e execute-o:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: seuprojeto
Target Host: localhost
Target Database: seuprojeto
Date: 24/11/2006 06:11:53
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tb_usuario
-- ----------------------------
CREATE TABLE `tb_usuario` (
  `USCOD` varchar(50) NOT NULL default '',
  `USSENHA` varchar(50) default NULL,
  `USNOME` varchar(50) default NULL,
  `USEMAIL` varchar(50) default NULL,
  PRIMARY KEY  (`USCOD`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='InnoDB free: 3072 kB';

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `tb_usuarios` VALUES ('well', '123', 'wellington marinheiro', 'wmarinheiro@hotmail.com');

Pronto !!! Até aqui temos:
Hibernate configurado dentro do projeto;
A Classe Usuario;
A Classe UsuarioDAO;
O Mapeamento;
A tabela no banco de dados;

Para testar esta fase, não vamos ainda para o TomCat, criaremos uma classe main para teste…

Copie o conteúdo abaixo em uma nova classe main e salve com o nome Teste.java, dentro da pasta src

public class Teste { 
	
public static void main(String[] args) throws Exception { 
		
	try 
	{ 
		String log = "login"; 
		String senha = "abc"; 
		String nome = "Rafael"; 
		String email = "Rafael@email.com.br";

		UsuarioDAO dao = new UsuarioDAO; 
		Usuario usuario = new Usuario(log,senha,nome,email);		
		dao.UsInserir(usuario);
		System.out.println("Registro inserido com sucesso!!!");
		} 
		catch(Exception e) 
		{    
			System.out.println("Não foi possivel, Erro: " + e.getMessage()); 
		} 
	} 
}

Fazendo um resumo dos arquivos criados e seus locais:

SeuProjeto:
hibernate3.jar
hibernate-mapping-3.0.dtd
WEB-INF
classes
hibernate.properties
log4j.properties
Usuario.hbm.xml (Este vem automaticamente, não precisa salvar aqui…)

    [b]lib[/b]
        ...com todos os JARs trazidos do pacote Hibernate 3.2

  [b] src[/b]            
       hibernate.properties
       log4j.properties
       UsuarioDAO.java
       Teste.java
       Usuario.java
       Usuario.hbm.xml

Execute este arquivo e, se tudo estiver como descrito, voce terá inserido o primeiro registro numa base de dados utilizando o hibernate…

É pouco mas já é um começo, na proxima etapa, conforme prometido, vamos inserir registros num ambiente web, através de uma pagina jsp.

Este tutorial tambem poderá ser visto em http://www.livramento.yu.com.br/Hibernate.html

Espero ter ajudado,
Wellington Marinheiro
wmarinheiro@hotmail.com

parabéns Wellington!

vai ter muito útil pra mim, e pra muitos outros com certeza!

Qual o Esquema se eu usar Annotations??? :twisted: