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"