Tutorial hibernate fase 1

6 respostas
W

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 raz 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 acesse 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.

&lt; ?xml version="1.0"?&gt;
&lt; !DOCTYPE hibernate-mapping PUBLIC "-//Hibernate Mapping DTD 3.0//EN" 
"hibernate-mapping-3.0.dtd"&gt;

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

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&#58; localhost
Source Database&#58; seuprojeto
Target Host&#58; localhost
Target Database&#58; seuprojeto
Date&#58; 24/11/2006 06&#58;11&#58;53
*/

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

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `tb_usuarios` VALUES &#40;'well', '123', 'wellington marinheiro', '[email removido]'&#41;;
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 &#123; 
	
public static void main&#40;String&#91;&#93; args&#41; throws Exception &#123; 
		
	try 
	&#123; 
		String log = "login"; 
		String senha = "abc"; 
		String nome = "Rafael"; 
		String email = "[email removido]";

		UsuarioDAO dao = new UsuarioDAO; 
		Usuario usuario = new Usuario&#40;log,senha,nome,email&#41;;		
		dao.UsInserir&#40;usuario&#41;;
		System.out.println&#40;"Registro inserido com sucesso!!!"&#41;;
		&#125; 
		catch&#40;Exception e&#41; 
		&#123;    
			System.out.println&#40;"Não foi possivel, Erro&#58; " + e.getMessage&#40;&#41;&#41;; 
		&#125; 
	&#125; 
&#125;

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

Tambem neste link, em breve estará disponiblizado um tutorial de como utilizar o MD5 em java, bem simples e bastante util, aguardem…

Espero ter ajudado,
Wellington Marinheiro
[email removido]

6 Respostas

C

Boa iniciativa Wellington, o tópico já está como fixo! :joia:

J

Cara… se todo mundo tivesse essa paciência como você Wellington, iriamos triplicar o número de “javeiros” hehehe… parabéns pela iniciativa… e espero que outros usuários se espelhem em você e dê uma força pra quem está começando … assim como você “me ajudou” hehe :lol:

Obrigado

W

Oiii…

então, fiz exatamente igual ao tutorial e deu erro (claro q não devo ter feito igual, senão teria funcionado, hehehehe).

2007-03-05 14&#58;19&#58;18,687 INFO hibernate.cfg.Configuration -&gt; Reading mappings from resource&#58; Usuario.hbm.xml 2007-03-05 14&#58;19&#58;19,296 ERROR hibernate.util.XMLHelper -&gt; Error parsing XML&#58; XML InputStream&#40;1&#41; The processing instruction target matching &quot;&#91;xX&#93;&#91;mM&#93;&#91;lL&#93;&quot; is not allowed. Erro&#58; Could not read mappings from resource&#58; Usuario.hbm.xml

Alguma dica?!

Valeu![/code]

G

Coloque o arquivo Usuario.hbm.xml aqui para darmos uma olhada.

W

Resolvi... mas agora surgiu outro problema...

Na verdade, eu consigo adicionar um dado qualquer à minha tabela...

Agora preciso saber como proceder para realizar uma consulta dentro dela... e mostrar ela na tela...

To trabalhando diretamente em java. Não tô usando JSP, JSF, nada... to fazendo ensaios pra aprender a utilizar este framework... mas vamos ao problema... tenho os seguintes arquivos em um mesmo diretório (por enquanto, até aprender) hehehe:

-hibernate.properties
-UsuarioDAO.java (este eu não renomeei, por preguiça... mas ele se refere à CorrespUsr)
-CorrespUsr.java
-Teste.java

Aí vão os códigos de cada um: UsuarioDAO
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Restrictions;
 
 public class UsuarioDAO&#123;
 	
 	private SessionFactory factory;
 	private Session session;
 	
 	public UsuarioDAO&#40;&#41; throws Exception&#123;
 		factory = new Configuration&#40;&#41;.addClass&#40;CorrespUsr.class&#41;.buildSessionFactory&#40;&#41;;
	
 	&#125;     
 	
 	public void UsInserir&#40;CorrespUsr us&#41; throws Exception &#123;
 		Session session = factory.openSession&#40;&#41;;
 		Transaction tx = null;
 		tx = session.beginTransaction&#40;&#41;;
 		session.save&#40;us&#41;;
 		tx.commit&#40;&#41;;  
 		session.flush&#40;&#41;;
 		session.close&#40;&#41;;
 	&#125;
 	
 	public void UsAlterar&#40;CorrespUsr us&#41; throws Exception &#123;
 		Session session = factory.openSession&#40;&#41;;
 		session.update&#40;us&#41;;
 		session.flush&#40;&#41;;
 		session.close&#40;&#41;;
 	&#125;
 	public void UsExcluir&#40;CorrespUsr us&#41; throws Exception &#123;
 		Session session = factory.openSession&#40;&#41;;
 		session.delete&#40;us&#41;;
 		session.flush&#40;&#41;;
 		session.close&#40;&#41;;
 	&#125;
 &#125;
CorrespUsr:
import java.io.Serializable;
/*import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;*/

/** @author Hibernate CodeGenerator */
public class CorrespUsr implements Serializable &#123;

    /** identifier field */
    private long usuario;

    /** nullable persistent field */
    private String nome;

    /** nullable persistent field */
    private String setor;

    /** nullable persistent field */
    private String senha;

    /** nullable persistent field */
    private int status2;

    /** full constructor */
    
    
    public CorrespUsr&#40;String nome, String setor, String senha, int status2&#41; &#123;
        this.setNome&#40;nome&#41;;
        this.setSetor&#40;setor&#41;;
        this.setSenha&#40;senha&#41;;
        this.setStatus2&#40;status2&#41;;
    &#125;

    /** default constructor */
    public CorrespUsr&#40;&#41; &#123;
    &#125;

    public long getUsuario&#40;&#41; &#123;
        return this.usuario;
    &#125;

    public void setUsuario&#40;long usuario&#41; &#123;
        this.usuario = usuario;
    &#125;

    public java.lang.String getNome&#40;&#41; &#123;
        return this.nome;
    &#125;

    public void setNome&#40;java.lang.String nome&#41; &#123;
        this.nome = nome;
    &#125;

    public java.lang.String getSetor&#40;&#41; &#123;
        return this.setor;
    &#125;

    public void setSetor&#40;java.lang.String setor&#41; &#123;
        this.setor = setor;
    &#125; 
    
    public java.lang.String getSenha&#40;&#41; &#123;
        return this.senha;
    &#125;

    public void setSenha&#40;java.lang.String senha&#41; &#123;
        this.senha = senha;
    &#125;

    public int getStatus2&#40;&#41; &#123;
        return this.status2;
    &#125;

    public void setStatus2&#40;int status2&#41; &#123;
        this.status2 = status2;
    &#125;
/*
    public String toString&#40;&#41; &#123;
        return new ToStringBuilder&#40;this&#41;
            .append&#40;&quot;usuario&quot;, getUsuario&#40;&#41;&#41;
            .toString&#40;&#41;;
    &#125;

    public boolean equals&#40;Object other&#41; &#123;
        if &#40; !&#40;other instanceof CorrespUsr&#41; &#41; return false;
        CorrespUsr castOther = &#40;CorrespUsr&#41; other;
        return new EqualsBuilder&#40;&#41;
            .append&#40;this.getUsuario&#40;&#41;, castOther.getUsuario&#40;&#41;&#41;
            .isEquals&#40;&#41;;
    &#125;

    public int hashCode&#40;&#41; &#123;
        return new HashCodeBuilder&#40;&#41;
            .append&#40;getUsuario&#40;&#41;&#41;
            .toHashCode&#40;&#41;;
    &#125;
*/
&#125;

O teste java, eu tinha ele setado pra cadastrar um valor no banco, mas quero que ele liste os itens que a tabela possui...

ajudas?!

Brigadão aí povo................

:grin:

G

Gostaria de ver um exemplo desses com um update ao invés de save.
E se tivesse uma condição, onde ficaria ela?

Criado 26 de novembro de 2006
Ultima resposta 20 de mar. de 2007
Respostas 6
Participantes 6