Persistência com Hibernate

1. Estrutura de diretórios (pacote persistir):

 

2. Pacotes no classpath (\src\lib):

 

3. hibernate.cfg.xml (\src):

Este arquivo é responsável por configurar o Hibernate, especificando caminho do banco, driver, usuário, senha, etc.

 

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

 

<hibernate-configuration>

   

    <session-factory>

       

        <!-- Database connection settings -->

        <Property name="connection.driver_class">

            org.firebirdsql.jdbc.FBDriver

        </Property>

 

        <Property name="connection.url">

            jdbc:firebirdsql:localhost/3050:D:\\Caminho\\Do\\banco\\Banco.FBS

        </Property>

       

        <Property name="connection.username">SYSDBA</Property>

        <Property name="connection.password">senha</Property>

       

        <!-- JDBC connection pool (use the built-In) -->

        <Property name="connection.pool_size">1</Property>

       

        <!-- SQL dialect -->

        <Property name="dialect">

            org.hibernate.dialect.HSQLDialect

        </Property>

       

        <!-- Enable Hibernate's automatic session context management -->

        <Property name="current_session_context_class">thread</Property>

       

        <!-- Disable the second-level cache  -->

        <Property name="cache.provider_class">

            org.hibernate.cache.NoCacheProvider

        </Property>

       

        <!-- Echo all executed SQL To stdout -->

        <Property name="show_sql">True</Property>

       

        <!-- Drop And re-create the database schema On startup -->

        <mapping resource="persistir/entidades/Produto.hbm.xml" />     

       

    </session-factory>

   

</hibernate-configuration>

 

4. log4j.properties (\src):

 

Este arquivo configura a maneira como serão registrados os eventos do banco de dados.

 

### direct log messages To stdout ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

 

 

### Set log levels - For more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

 

 

### log just the SQL

log4j.logger.org.hibernate.SQL=Debug

 

### log JDBC bind parameters ###

log4j.logger.org.hibernate.type=info

 

5. DBConexao.java (\src\persistir\bd):

 

Esta classe registra uma sessão de banco de dados.

 

package persistir.bd;

 

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

 

public class DBConexao {

 

    private static final SessionFactory sessionFactory;

 

    static {

        try {

            // Cria a SessionFactory a partir do hibernate.cfg.xml

            sessionFactory = new Configuration().configure()

                    .buildSessionFactory();

        } catch (Throwable ex) {

            System.err.println("Falha na criacao da SessionFactory" + ex);

            throw new ExceptionInInitializerError(ex);

        }

    }

 

    public static SessionFactory getSessionFactory() {

        return sessionFactory;

    }

 

}

 

6. Produto.java (\src\persistir\entidades):

 

Esta classe é uma entidade que mapeia os campos da tabela em objetos (obrigatório construtor e getters and setters).

 

package persistir.entidades;

 

public class Produto {

 

    private int CD_PRODUTO;

 

    private int NR_PRODUTO;

 

    private String NM_PRODUTO;

 

    private String NM_REDUZIDO;

 

    private String DS_SETOR_DEPOSITO;

 

    public Produto() {

 

    }

 

    public int getCD_PRODUTO() {

        return CD_PRODUTO;

    }

 

    public void setCD_PRODUTO(int cd_produto) {

        CD_PRODUTO = cd_produto;

    }

 

    public String getDS_SETOR_DEPOSITO() {

        return DS_SETOR_DEPOSITO;

    }

 

    public void setDS_SETOR_DEPOSITO(String ds_setor_deposito) {

        DS_SETOR_DEPOSITO = ds_setor_deposito;

    }

 

    public String getNM_PRODUTO() {

        return NM_PRODUTO;

    }

 

    public void setNM_PRODUTO(String nm_produto) {

        NM_PRODUTO = nm_produto;

    }

 

    public String getNM_REDUZIDO() {

        return NM_REDUZIDO;

    }

 

    public void setNM_REDUZIDO(String nm_reduzido) {

        NM_REDUZIDO = nm_reduzido;

    }

 

    public int getNR_PRODUTO() {

        return NR_PRODUTO;

    }

 

    public void setNR_PRODUTO(int nr_produto) {

        NR_PRODUTO = nr_produto;

    }

 

}

 

7. Produto.hbm.xml (\src\persistir\entidades):

 

Este diz ao hibernate que tabela esta associada a tal entidade (objeto).

 

<?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="persistir.entidades.Produto"

        table="TB_PRODUTO">

 

        <id name="CD_PRODUTO" column="CD_PRODUTO">

            <generator class="native" />

        </id>

 

        <property name="NR_PRODUTO" />

 

        <property name="NM_PRODUTO" />

 

        <property name="NM_REDUZIDO" />

 

        <property name="DS_SETOR_DEPOSITO" />

 

    </class>

 

</hibernate-mapping>

 

8. ObtemProduto.java (\src\persistir\negocio):

 

Classe que conecta no banco e faz um select =)

 

package persistir.negocio;

 

import persistir.bd.*;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

 

import org.hibernate.Session;

 

public class ObtemProduto {

 

    public HashMap getMercadoria(int codigo) {

 

        /*--------------------<Conexao ao banco>-----------------------------*/

 

        Session session = DBConexao.getSessionFactory().getCurrentSession();

 

        session.beginTransaction();

 

        List produtos = session.createSQLQuery("SELECT NM_PRODUTO FROM TB_PRODUTO WHERE NR_PRODUTO = " + codigo).list();

 

        session.getTransaction().commit();

 

        DBConexao.getSessionFactory().close();

 

        /*--------------------</Conexao ao banco>-----------------------------*/

 

        /*--------------------<Metodos>-----------------------------*/

 

        HashMap mercadoria = new HashMap();

 

        for (Iterator it = produtos.iterator(); it.hasNext();) {

            String object = (String) it.next();

            mercadoria.put("nome", object);

 

        }

 

        return mercadoria;

 

    /*--------------------</Metodos>-----------------------------*/

 

    }

 

    public static void main(String[] args) {

 

        HashMap produto = new ObtemProduto().getMercadoria(3220);

 

        System.out.println(produto.get("nome"));

 

    }

}