Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Escrevendo sua primeira aplicação Java SE usando Hibernate + MySQL + Netbeans

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Escrevendo sua primeira aplicação Java SE usando Hibernate + MySQL + Netbeans

    1 - Introdução

    Neste artigo mostrarei passo-a-passo como criar um cadastro de usuários usando Java SE console + Hibernate + MySQL + Netbeans. Esta é uma aplicação simples mas que, com certeza, servirá como base para aplicações mais avançadas. Durante os anos de consultor eu percebi que a maior dificuldade dos iniciantes em Hibernate está em fazer a primeira aplicação rodar. A partir do entendimento desta primeira aplicação, a colocação correta dos diversos JARs que compõem o framework e a verificação de que os dados foram inseridos corretamente no banco de dados, os usuários iniciantes já se sentem mais confiantes para progredir.

    Infelizmente, a maioria dos livros sobre o assunto dedicam cinco ou mais capítulos somente aos aspectos teóricos do Hibernate Framework e a importância do ORM (Object-Relation Mapping - Mapeamento Objeto-Relacional).

    Por esta razão e em resposta a várias solicitações dos visitantes do meu site eu resolvi escrever este pequeno roteiro. Siga-o atentamente e terá sua primeira aplicação Java usando Hibernate em questão de minutos.

    2 - Ferramentas Necessárias

    Para construir o exemplo você precisará das seguintes ferramentas:

    a) Uma instalação funcional do Hibernante - Baixe, instale e teste uma versão recente do Hibernate. Aqui mesmo no meu site você encontrará informações sobre como proceder.

    b) O banco de dados MySQL - Baixe, instale e teste uma versão recente do MySQL. Você encontrará esta informação aqui no site também.

    c) Netbeans - Certifique-se de estar usando uma versão bem atual do Netbeans.

    d) O Java SDK - Para este exemplo nós vamos usar XML para fazer o mapeamento entre a nossa classe e o banco de dados MySQL (um arquivo *.hbm.xml). Por enquanto não usaremos Annotations. Assim, qualquer Java SDK maior que 1.4 servirá.

    e) MySQL Connector/J - Este é o driver usado para fazer a ponte JDBC e o banco de dados MySQL. Aqui no meu site você também encontará informações sobre como baixar e instalar este driver.

    3 - Preparando o banco de dados

    A aplicação que vamos construir é bem simples. Teremos apenas o id, nome, e-mail e senha de um usuário. Assim, crie uma base de dados chamada "estudos" e crie a seguinte tabela MySQL:

    Código PHP:
    CREATE TABLE estudos.usuarios (
      
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      
    nome VARCHAR(45NOT NULL,
      
    email VARCHAR(45NOT NULL,
      
    senha VARCHAR(10NOT NULL,
      
    PRIMARY KEY (id)
    )
    ENGINE InnoDB
    Veja que o campo id é do tipo int, auto-incremento e chave primária. Desta forma, o Hibernate deverá saber como incrementar os valores deste campo automaticamente. Hora de passarmos para o Netbeans.

    4 - Criando a aplicação no Netbeans

    Se você ainda não o fez, abra o Netbeans e crie um novo projeto. Vá em Arquivo -> Novo Projeto -> Java -> Aplicativo Java. Dê o nome "exemplo_hibernate" ao projeto e salve-o no diretório de sua preferência. Em minha máquina eu deixei em "C:\estudos_hibernate'. Clique o botão Finalizar.

    Agora vamos criar um POJO (não é xingamento. É Plain Old Java Object). Qualquer classe Java pode ser persistida em um banco de dados por meio do Hibernate. Mais um ponto para ele. Assim, vá em Arquivo -> Novo Arquivo -> Java - Classe Java. Dê o nome "Usuario" para a classe e coloque-a em um pacote chamado "osmar" (Sou o autor do artigo. Mereço esta homenagem). Sua estrutura de arquivo e pacotes deverá agora estar semelhante à figura abaixo:

    Agora altere o conteúdo de Usuario.java para:

    Código para Usuario.java:

    Código PHP:
    package osmar;

    public class 
    Usuario{
      private 
    int id;
      private 
    String nome;
      private 
    String email;
      private 
    String senha;

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

      public 
    String getEmail(){
        return 
    email;
      }

      public 
    void setEmail(String email){
        
    this.email email;
      }

      public 
    String getSenha(){
        return 
    senha;
      }

      public 
    void setSenha(String senha){
        
    this.senha senha;
      }

    Analise o código desta classe cuidadosamente e vamos passar para o arquivo de mapeamento. Clique com o botão direito em "Pacotes de Códigos Fonte" e escolha Novo -> Documento XML. Dê o nome usuario.hbm.xml e deixe o campo pasta como "src". Agora altere seu conteúdo para:

    Conteúdo para usuario.hbm.xml:

    Código PHP:
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

      <hibernate-mapping>
        <class name="osmar.Usuario" table="usuarios">
          <id name="id" type="int" column="id">
            <generator class="increment"/>
          </id>

          <property name="nome">
            <column name="nome"/>
          </property>

          <property name="email">
            <column name="email"/>
          </property>

          <property name="senha">
            <column name="senha"/>
          </property>
        </class>
    </hibernate-mapping>
    Já estamos quase lá. Temos a tabela no banco de dados, a classe Usuario e o arquivo de mapeamento entre a classe e a tabela do banco de dados. Podemos passar agora para o arquivo de configuração do Hibernate. Muita atenção agora.

    Clique com o botão direito em "Pacotes de Códigos Fonte" e escolha Novo -> Documento XML. Dê o nome "hibernate.cfg.xml" ao arquivo e deixe o campo pasta como "src". Isso fará com que o arquivo de configuração do Hibernate seja colocado no raiz do projeto. Veja o conteúdo para este arquivo:

    Conteúdo para hibernate.cfg.xml:

    Código PHP:
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>
      <session-factory>
        <property name="hibernate.connection.driver_class">
          com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">
          jdbc:mysql://localhost/estudos</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="show_sql">true</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- Arquivos de Mapeamento -->
        <mapping resource="usuario.hbm.xml"/>
      </session-factory>
    </hibernate-configuration>
    Até este momento sua estrutura de arquivos e pacotes deverá estar assim:



    Vamos passar para a classe principal da aplicação. Antes, clique com o botão direito em Bibliotecas -> Adicionar JAR/Pasta e localize o JAR hibernate3.jar. Marque Caminho Absoluto e clique o botão Open. Faça o mesmo com o driver do banco de dados MySQL (O meu é mysql-connector-java-5.1.10-bin.jar). Em seguida altere o código da classe principal (Main.java) para:

    Código para Main.java:

    Código PHP:
    package exemplo_hibernate;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import osmar.Usuario;

    public class 
    Main {
      public static 
    void main(String[] args) {
        
    Session session null;

        try {
          
    // aqui nós lemos as configurações do arquivo hibernate.cfg.xml
          // e deixamos o Hibernate pronto para trabalhar
          
    SessionFactory sessionFactory = new 
            
    Configuration().configure().buildSessionFactory();
          
    session sessionFactory.openSession();

          
    // vamos criar uma nova instância da classe Usuario
          // e definir valores para seus atributos

          // note que não precisamos atribuir valores para
          // o atributo id
          
    System.out.println("Vou gravar um novo usuário");
          
    Usuario u = new Usuario();
          
    u.setNome("Osmar J. Silva");
          
    u.setEmail("osmar@arquivodecodigos.net");
          
    u.setSenha("1234");

          
    Transaction tx session.beginTransaction();
          
    session.save(u); // vamos salvar o usuário
          
    session.flush();
          
    tx.commit();

          
    System.out.println("Finalizei. Veja a tabela usuarios");
        } 
        catch(
    Exception e){
          
    System.out.println(e.getMessage());
        } 
        finally{
          
    session.close();
        }
      }

    Vamos executar o programa. Aperte a tecla F6 e se prepare para a primeira surpresa:

    Exception in thread "main" java.lang.NullPointerException
    at exemplo_hibernate.Main.main(Main.java:40)
    Essa é fácil. Mova as linhas:

    Código PHP:
    SessionFactory sessionFactory 
      new 
    Configuration().configure().buildSessionFactory();
    session sessionFactory.openSession(); 
    para fora do bloco try:

    Código PHP:
    SessionFactory sessionFactory 
      new 
    Configuration().configure().buildSessionFactory();
    session sessionFactory.openSession();

    try { 
    e execute novamente. Agora temos mais informações sobre o motivo da exceção:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    at exemplo_hibernate.Main.main(Main.java:14)
    Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
    at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:3 07)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:2 52)
    at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:320)
    ... 1 more
    Isso aconteceu porque não importamos os JARs obrigatórios do pacote required do Hibernate. Em minha máquina estes JARs estão em "C:\hibernate\lib\required". Assim, clique com o botão direito em Bibliotecas -> Adicionar JAR/Pasta e importe todos os JARs desta pasta. Execute a aplicação novamente. Se for sortudo, a aplicação será iniciada com sucesso. Para alguns, uma exceção parecida com o conteúdo abaixo será exibida:

    SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
    SLF4J: See Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... for further details.
    org.hibernate.cfg.Environment <clinit>
    INFO: Hibernate 3.5.1-Final
    org.hibernate.cfg.Environment <clinit>
    INFO: hibernate.properties not found
    org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: Bytecode provider name : javassist
    org.hibernate.cfg.Environment <clinit>
    INFO: using JDK 1.4 java.sql.Timestamp handling
    org.hibernate.cfg.Configuration configure
    INFO: configuring from resource: /hibernate.cfg.xml
    org.hibernate.cfg.Configuration getConfigurationInputStream
    INFO: Configuration resource: /hibernate.cfg.xml
    Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
    at org.hibernate.util.ConfigHelper.getResourceAsStrea m(ConfigHelper.java:170)
    at org.hibernate.cfg.Configuration.getConfigurationIn putStream(Configuration.java:1497)
    at org.hibernate.cfg.Configuration.configure(Configur ation.java:1519)
    at org.hibernate.cfg.Configuration.configure(Configur ation.java:1506)
    at exemplo_hibernate.Main.main(Main.java:14)
    Este é um exemplo clássico de diferença da versão de biblioteca exigida pelo Hibernate e aquela disponível ou disponibilizada junto com o download. Para esta simulação, basta substituir o JAR slf4j-api-1.5.8.jar por slf4j-api-1.6.0.jar (disponível para download em Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...).

    Outra exceção que você poderá encontrar é:

    org.hibernate.cfg.Environment <clinit>
    INFO: Hibernate 3.5.1-Final
    org.hibernate.cfg.Environment <clinit>
    INFO: hibernate.properties not found
    org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: Bytecode provider name : javassist
    org.hibernate.cfg.Environment <clinit>
    INFO: using JDK 1.4 java.sql.Timestamp handling
    org.hibernate.cfg.Configuration configure
    INFO: configuring from resource: /hibernate.cfg.xml
    org.hibernate.cfg.Configuration getConfigurationInputStream
    INFO: Configuration resource: /hibernate.cfg.xml
    Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
    at org.hibernate.util.ConfigHelper.getResourceAsStrea m(ConfigHelper.java:170)
    at org.hibernate.cfg.Configuration.getConfigurationIn putStream(Configuration.java:1497)
    at org.hibernate.cfg.Configuration.configure(Configur ation.java:1519)
    at org.hibernate.cfg.Configuration.configure(Configur ation.java:1506)
    at exemplo_hibernate.Main.main(Main.java:14)
    Isso acontece quando o arquivo de configuração hibernate.cfg.xml não é encontrado. Para solucionar, verifique se o arquivo está realmente na raiz da aplicação, ou seja, sua estrutura de arquivos e diretórios deve ser parecida com:


    5 - Conclusão

    Se após seguir os passos que detalhei neste artigo você conseguiu executar sua primeira aplicação Java + Hibernate, eu acredito que os passos seguintes serão bem menos doloridos. Como dito no início do texto, a maior dificuldade dos iniciantes em Hibernate é conseguir fazer a primeira aplicação rodar. Se correu tudo bem com você eu fico feliz por ter compartilhado este conhecimento.

    Agora é com você! Boa sorte nos estudos.
    ~# Criado pela [IN]Segurança #~
X
Working...
X