Atenção: esse artigo tem uma palestra complementar. Clique e assista!
Neste artigo você conhecerá o Fluent NHibernate, um framework que permite a utilização do famoso NHibernate, sem a necessidade de se criar os arquivos XML de mapeamento.
Para que serve
O NHibernate é uma famosa ferramenta de Mapeamento Objeto/Relacional, que usa arquivos XML para configurar armazenar os mapeamentos entre o modelo de entidades e as tabelas do database. Com o Fluent NHibernate podemos eliminar o uso dos XMLs, com alternativas práticas, testáveis, compiláveis e até automáticas.
Em que situação o tema é útil
O Fluent NHibernate pode ser uma ótima alternativa se você quer o poder do NHibernate mas não quer se preocupar em manter dezenas de arquivos XML de mapeamento. Podendo inclusive aumentar a produtividade do desenvolvimento dos seus projetos.
Resumo do DevMan
O NHibernate é um dos projetos de código aberto mais bem sucedidos na comunidade .NET. Essa ferramenta de O/RM tem se difundido muito nos últimos anos, e uma das principais escolhas quando a questão é desenvolver aplicações orientadas a objetos com bancos de dados relacionais.
Conheça agora o Fluent NHibernate, um outro projeto de código aberto que estende as funcionalidades de mapeamento do NHibernate, eliminando o uso dos arquivos XML.
Para um bom entendimento das técnicas expostas neste artigo, é imprescindível que você tenha os conhecimentos básicos em NHibernate. Confira aqui mesmo na .net Magazine, nas edições anteriores, vários artigos sobre o assunto.
O NHibernate é a versão para .NET do framework de persistência chamado Hibernate, originalmente desenvolvido para a plataforma Java. O objetivo de um framework de persistência como o NHibernate é “transformar” os dados que estão na aplicação na forma de objetos, em dados relacionais, compatíveis com os bancos de dados relacionais que temos no mercado.
Para que isso seja possível, é necessária a realização de um mapeamento objeto-relacional. Por isso também dizemos que o NHibernate é uma ferramenta de O/RM. A principal vantagem do NHibernate é que com ele não precisamos escrever nenhum comando SQL. Todos os comandos são gerados em tempo de execução pelo framework. Além disso, ele dá suporte para os principais bancos de dados relacionais do mercado (SQL Server, Oracle, PostgreSQL, MySQL etc.), o que torna fácil o desenvolvimento de aplicações que trabalham com diferentes tipos de bancos.
Do ponto de vista do desenvolvedor, estamos trabalhando apenas com orientação a objetos, pois todas as ações CRUD são realizadas através dos métodos do nosso modelo de classes. De forma prática, através de um mapeamento objeto-relacional, o NHibernate gera todos os comandos SQL necessários para a aplicação, em tempo de execução.
O NHibernate é open source e pode ser baixado gratuitamente no site do Hibernate. Atualmente o NHibernate está na versão 2.1.0.GA, que saiu recentemente (Julho/2009). Neste mesmo mês também foi lançado o aguardado suporte à linguagem LINQ. Todos esses downloads podem ser baixados através deste link: sourceforge.net/projects/nhibernate/files.
Adicionalmente você vai encontrar uma vasta documentação e informações a respeito do NHibernate e Hibernate no seguinte site: www.hibernate.org
Mapeamento XML X Fluent NHibernate
Com o NHibernate precisamos fazer uso de arquivos XML, com a extensão HBM para configurar e armazenar os mapeamentos entre nossas classes e as tabelas do banco de dados. Veja na Listagem 1 um exemplo típico de um arquivo XML de mapeamento do NHibernate.
Listagem 1. Mapeamento XML HMB de uma entidade de Clientes
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping namespace="QuickStart" assembly="QuickStart" xmlns="urn:nhibernate-mapping-2.2">
<class name="Cliente" table="Clientes">
<id name="Id">
<generator class="identity" />
</id>
<property name="Nome">
<column name="Nome" not-null="true"
length="40" />
</property>
<property name="Sexo" />
<many-to-one name="Regiao" />
<bag name="Contatos">
<key column="Cliente_id" />
<one-to-many class="Cliente" />
</bag>
</class>
</hibernate-mapping>
Com o Fluent NHibernate este mapeamento pode ser feito via código, assim como você pode conferir na Listagem 2. Como veremos em maiores detalhes nos exemplos a seguir, ao invés de criarmos o arquivo XML, criamos uma classe de mapeamento. Mas qual a vantagem de criar uma classe de mapeamento em código ao invés de usar um arquivo XML? Falaremos sobre isso adiante.
Listagem 2. Mapeamento via código com o Fluent NHibernate
public class ClienteMap : ClassMap
{
public ClienteMap()
{
Id(x => x.Id);
Map(x => x.Nome)
.WithLengthOf(40)
.Not.Nullable();
Map(x => x.Sexo);
References(x => x.Regiao);
HasMany(x => x.Contatos);
}
}
...