Hibernate - Persistindo dados como se fosse objetos

Hibernate é um framework escrito em Java para mapeamento objeto relacional que auxilia na persistência de dados. Este facilita o mapeamento de atributos/classes permitindo que dados sejam persistidos como se fossem objetos não necessitando da utilização de SQL. Hibernate é um software livre de código aberto e distribuído sob licença LGPL.

[ Hits: 24.375 ]

Por: Luiz Henrique Rapatão em 12/11/2007


O que é?



Hibernate é um framework escrito em Java para mapeamento objeto relacional que auxilia na persistência de dados. Este facilita o mapeamento de atributos/classes permitindo que dados sejam persistidos como se fossem objetos, não necessitando da utilização de SQL. Hibernate é um software livre de código aberto e distribuído sob licença LGPL.

Como curiosidade, existe uma "versão" para a plataforma .Net chamada NHibernate.

ORM - Modelo Objeto Relacional

É uma técnica de desenvolvimento na qual se trabalha com classes referenciando tabelas de banco de dados relacionais e objetos referenciando seus registros. Com isto o programador pode se isentar da utilização de SQL trabalhando com os dados como se fossem objetos, deixando toda a preocupação em persistir o documento para um framework como o Hibernate, por exemplo.

Características

O fato de você trabalhar apenas com objetos e não mais com sintaxes SQL, torna o trabalho do programador muito mais simples, pois até mesmo relacionamentos complexos como os MxN podem ser solucionados de maneira simples.

O Hibernate faz conversões de métodos para salvar, alterar, excluir, etc. vinda de objetos para chamadas SQL, isso torna o mesmo, independente de um banco de dados específico e o fato de ser configurado através de um arquivo XML, a alteração de uma base de dados para outra é relativamente simples de ser feita, contudo isso gera um aumento no tempo de execução do sistema.

Configuração e mapeamento de entidades

Como citado anteriormente, o Hibernate faz uso de arquivos XML em sua configuração. Nestes arquivos ficam especificados os dialetos SQL, driver, nome de usuário, senha e lógico o host da base de dados. Nele também deve estar contido o mapeamento das entidades ou apenas referenciando o arquivo HBM ou o pacote de implementação no caso de uso de Annotations como mapeamento (este com suporte a partir da versão 3 do Hibernate).

Exemplos:

Configuração:

<hibernate-configuration>
  <session-factory name=“teste">
    <property  name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
      jdbc:mysql://127.0.0.1:3306/teste
    </property>
    <property name="hibernate.connection.username">
      root
    </property>
    <property name="hibernate.connection.password">
      123456
    </property>
    <property name="hibernate.dialect">
      org.hibernate.dialect.MySQLDialect
    </property>
    <property name="hibernate.connection.pool_size">
      5
    </property>
    <!– mapeamento -->
    <!-- via XML ->
    <mapping resource=“teste.hbm.xml” />
    <!-- via annotations ->
    <mapping package=“teste.integracao" />
  </session-factory>
</hibernate-configuration>

Mapeamento via XML:

<?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>
<!-- referencia uma classe a uma tabela -->
  <class name="tuto.hibernate.Cidade" table="CIDADE">
    <!-- define um atributo como pk -->
    <id name="id" column="id">
      <!-- define que o é incrementado automaticamente -->
      <generator class="increment"/>
    </id>
    <!-- declara um relacionamento Mx1 -->
    <many-to-one name="uf" class="tuto.hibernate.Uf"
                 column="sigla" lazy="false"/>
    <!-- declara um atributo como um campo da tabela -->
    <property name="descricao"  type="string"
              column="descricao"/>
  </class>
</hibernate-mapping>

Mapeamento via Annotations:

@Entity
public class Uf {
  @Id
  @Column(name = "sigla")
  private String sigla;
  
  @Column(name = "descr")
  private String descricao;

  @OneToMany(targetEntity = Cidade.class)
  @JoinColumn(name = "fkUf")
  Private Set<Município> municípios;

  // métodos get & set
}

HQL - Hibernate Query Language

Para se efetuar consultas especializadas o Hibernate possui uma linguagem específica, que se assemelha muito com o SQL padrão, mas tem como característica ser orientada a objeto, o que inclui paradigmas de herança, polimorfismo, etc.

Apesar de o Hibernate possuir uma linguagem específica para consultas, também é possível a utilização SQL.

Exemplo:

"from Uf uf, Cidade cid where cid.uf = uf.sigla"

    Próxima página

Páginas do artigo
   1. O que é?
   2. Métodos de utilização
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Conectando com Bco Interbase/Firebird em Java

Criar um Pool de Conexão entre o GlassFish 3.1 e PostgreeSQL

Imagens e áudio no banco de dados Oracle

Criando classe Java para conectar e manipular dados no MySQL

Trabalhando com Java e SQL (parte 1)

  
Comentários
[1] Comentário enviado por miura 787 em 12/11/2007 - 14:29h

Também já usei o hibernate e gostei muito na época, mas depois de experimentar o JPA do pacote EJB nunca mais quero ver o hibernate novamente.
O JPA ja faz toda a perte "mais chata" de configurações e métodos do hibernate automaticamente para vc, e vc ainda pode escolher o framework que o JPA irá utilizar como o TopLink e até mesmo o Hibernate, mas estes ficam transparentes para o programador que só utilizará os recursos JPA.

Experimentem

[2] Comentário enviado por joaocosme em 14/11/2007 - 11:08h

lindo sao os sqls gerados pelo hibernate, pesadelo de qualquer dba!

[3] Comentário enviado por sdxandy em 05/03/2008 - 06:30h

po goostei mesmo deste artigo

[4] Comentário enviado por rakeva em 31/08/2009 - 09:03h

Huwiahaha... verdade, aqui no serviço os dbas penam com os sqls gerados pelo hibernate xD
Quanto ao artigo, muito bom!


Contribuir com comentário