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: 21.682 ]

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

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

Trabalhando com Java e SQL (parte 1)

Criando classe Java para conectar e manipular dados no MySQL

Escrevendo aplicações com MySQL e Java

Conectando com Bco Interbase/Firebird em Java

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts