Olá, pessoal! Atendendo a pedidos de alguns leitores, hoje veremos o uso mais puro com Hibernate com JPA, ou seja, sem o uso de JSF ou qualquer outro front-end. Vamos criar a nossa velha classe Java com o método main e armazenar as informações em um BD (MySql).
Let’s go…
Atenção: não apresentarei como criar um BD ou como configurar o Hibernate no Eclipse, estou considerando que você já tem um ambiente de desenvolvimento pronto para entrar em ação.
Dados do DataBase:
- Crie um DataBase (usarei uma chamada livraria)
- Crie uma tabela (usarei uma tabela com o nome camilo)
- Dados da tabela: id(auto_increment), nome(varchar), cidade(varchar)
Preparação do projeto
- Crie um o Java Project no Eclipse com o nome que achar conveniente.
- Agora crie uma estrutura de packages conforme a imagem a seguir:
- Adicione os arquivos .jars do mysql, hibernate + JPA ao projeto. Clique com o botão direito no projeto escolha Properties e depois clique em JavaBuild. Na tela que aparece, clique em Add external jars (caso nao tenha uma Library para os .jars).
Desenvolvimento/Teste
Agora, crie uma classe Java com nome de Pessoa no package br.com.bean.
package br.com.bean; /*se os arquivos .jars nao estiver no projeto * nao será possivel encontrar os imports */ import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="camilo") public class Pessoa { private String nome; private String cidade; @Id int id; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCidade() { return cidade; } public void setCidade(String cidade) { this.cidade = cidade; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
Crie uma classe ConexaoHibert.java no package br.com.conexao
private static final SessionFactory sessionFactory; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); /* observe o que temos de importante * nesse bloco static, o arquivo * que possui os dados de conexao com * o banco de dados hibernateconfig.xml */ static{ try{ sessionFactory = new AnnotationConfiguration(). configure("hibernateconfig.xml") .buildSessionFactory(); }catch (Throwable e) { throw new ExceptionInInitializerError(e); } } //retorna uma sessao de comunicacao com o BD public static Session getInstance(){ Session session = (Session) threadLocal.get(); session = sessionFactory.openSession(); threadLocal.set(session); return session; }
Crie uma classe PessoaDAO no package br.com.hibernatedao
package br.com.hibernatedao; import org.hibernate.Session; import org.hibernate.Transaction; import br.com.bean.Pessoa; import br.com.conexao.ConexaoHibert; public class PessoaDAO { private Session session; public void Salvar(Pessoa p){ //obtem uma sessao session = ConexaoHibert.getInstance(); Transaction tx = null; //permite transacao com o BD try{ tx = session.beginTransaction(); session.save(p); tx.commit();//faz a transacao }catch (Exception e) { e.printStackTrace(); //cancela a transcao em caso de falha tx.rollback(); }finally{ session.close(); }}}
Agora crie uma arquivo .xml conforme o código abaixo:
<?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 name=""> <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">123</property> <mapping class="br.com.bean.Pessoa"/> </session-factory> </hibernate-configuration>
Fique atento aos nomes usado na classe Pessoa.java para fazer anotação. Veja que eu tenho o nome da tabela no BD diferente do nome da minha classe Java (fiz de propósito). Então, somos obrigados a definir o nome da tabela, caso contrário a JPA vai considerar o nome da classe.
Crie uma classe no package br.com.teste com o nome de PessoaTest.java.
package br.com.teste; import br.com.bean.Pessoa; import br.com.hibernatedao.PessoaDAO; public class PessoaTest { /** * @param args */ public static void main(String[] args) { Pessoa p = new Pessoa(); p.setNome("mel"); p.setCidade("Salvador"); PessoaDAO pdao = new PessoaDAO(); pdao.Salvar(p); }}
Salve e execute a classe PessoaTest.java e verifique se os dados foram inseridos no BD.
Pronto! Bem simples, não? E menos cansativo que usar o velho padrão DAO com JDBC. Espero que tenham gostado!
Abraços e até o próximo artigo!