Introdução
Hibernate é um mecanismo bem simples e poderoso que permite a persistência de objetos em banco de dados relacionais de maneira transparente e para qualquer tipo de aplicação Java (seja ela web-based ou desktop-based). Ou seja, ao invés de perder tempo escrevendo SQL, misturando estas consultas no meio do seu código Java e ficar mapeando o resultado de suas consultas para objetos, com o Hibernate você vai precisar se preocupar somente com seus objetos. Além disso, o processo de desenvolvimento usando Hibernate é muito mais simples do que usar JDBC puro. Com Hibernate, você só tem estes 5 passos:
Criando a tabela e a classe
Vamos começar definindo uma tabela simples no banco de dados.
CREATE TABLE 'amigos'( 'nome' varchar(40) NOT NULL DEFAULT '', 'endereco' varchar(60) NOT NULL DEFAULT '', 'fone' varchar(11) DEFAULT NULL, 'cel' varchar(11) DEFAULT NULL, 'email' varchar(70) DEFAULT NULL, 'nascimento' datetime DEFAULT NULL, PRIMARY KEY (`nome`) );
nota: esse passo pode ser pulado, se você utilizar as ferramentas que acompanham o Hibernate, que já geram o código de criação das tabelas (SchemaExport). Pronto. Uma tabela para que eu possa guardar os dados dos meus amigos, como se fosse uma agenda. Agora vamos para o próximo passo, que é a reprensentação disso em forma de objeto em Java. Como o Hibernate trabalha através de reflexão para fazer o mapeamento, temos que "beanificar" nosso objeto. Assim:
public class Amigo { private String nome; private String endereco; private String telefone; private String celular; private String email; private java.util.Date nascimento; public Amigo() { } public String getNome(){ return nome; } public void setNome(String nome){ this.nome = nome; } // os outros métodos get/set vão aqui... public java.util.Date getNascimento(){ return nascimento; } public void setNascimento(java.util.Date nascimento){ this.nascimento = nascimento; } }
Nada muito complicado até aqui, certo? Criamos uma tabela e um bean que "representa" o esquema desta nossa tabela. Então nos falta informar ao Hibernate como juntar os dois. Para fazermos isso, é preciso criar um arquivo de mapeamento, cujo nome deve ser sempre "NomeDoObjeto.hbm.xml" (no nosso caso, "Amigo.hbm.xml"); cada objeto a ser persistido tem seu próprio arquivo de mapeamento.
O XML que faz o mapeamento
O modelo para o nosso Amigo.hbm.xml segue abaixo:
O modelo para o nosso Amigo.hbm.xml segue abaixo:
Coisas para as quais deve se ter atenção:
hibernate.connection.driver_class = org.gjt.mm.mysql.Driver # o driver hibernate.connection.url = jdbc:mysql://localhost:3306/agenda # a url hibernate.connection.username = daniel # o username hibernate.connection.password = senha # a senha
Dê a ele o nome que você quiser (agenda.properties, por exemplo). Porém, se você der a este arquivo o nome de hibernate.properties e colocá-lo no seu classpath, o Hibernate irá carregá-lo automaticamente durante a início do programa. Até aqui temos:
Manipulando os dados
Agora vamos brincar de persistir, criando nosso DAO!!!
import cirrus.hibernate.*; import java.util.Date; public class AmigoDAO{ private SessionFactory factory; public AmigoDAO() throws Exception{ Datastore datastore = Hibernate.createDatastore(); datastore.storeClass(Amigo.class); factory = datastore.buildSessionFactory(); } public void insert(Amigo amigo) throws Exception{ Session session = factory.openSession(); session.save(amigo); session.flush(); session.close(); } public java.util.List getList(String condicao) throws Exception{ Session session = factory.openSession(); List amigos = session.find(condicao); session.flush(); session.close(); return amigos; } public Amigo retrieve(String pk) throws Exception{ Session session = factory.openSession(); Amigo amigo = (Amigo)session.load(Amigo.class, pk); session.flush(); session.close(); return amigo; } public void delete(Amigo amigo) throws Exception{ Session session = factory.openSession(); session.delete(amigo); session.flush(); session.close(); } }
Bom, algumas coisas acima tem que ser ressaltadas:
from in class where
O Hibernate possui uma query language própria, orientada a objetos. Bom, este é quase um "hello world" para se trabalhar com o Hibernate. Algumas coisas, como controle de transação e foreign keys, não foram abordadas e vão ficar para um próximo tutorial. A finalidade deste aqui é só a de mostrar uma alternativa ao "JDBC puro" na construção de sistemas que precisem de banco de dados como meio de persistência. Dúvidas, críticas, erros, usem o nosso fórum. p.s.: Devido ao fato de muitos estarem usando a versão 2 do Hibernate, é preciso se atentar às mudanças entre as duas versões, como a alteração do nome dos pacotes (de cirrus.hibernate.* para net.sf.hibernate), entre outras coisas. Para maiores informações sobre como portar suas aplicações da versão 1.x.x do Hibernate para a versão 2.x.x, visite: http://hibernate.org/68.html.
Fonte: http://guj.com.br/Vitor Yudi Hansen