C# - Usando o NHibernate 2.1 com SharpDevelop 3.1 e MySQL/SQL Server
Neste artigo eu estou voltando a falar sobre o NHibernate (gostei do danado), desta vez usando a linguagem C# e o SharpDevelop 3.0, se bem que o projeto também pode ser carregado no Visual C# 2008 Express Edition. |
Eu já escrevi os seguintes artigos a respeito:
VB .NET - Usando o NHibernate - Apresenta a utilização do NHibernate com o VB .NET;
NHibernate -Efetuando o mapeamento
XML - Mostra
exemplos de mapeamentos;
.NET - NHibernate a revanche - Gerando os arquivos de mapeamento
com o MyGeneration;
NHibernate - Usando o ActiveRecord I - Ganhando
produtividade com o NHibernate (3 artigos);
Neste artigo eu vou usar o NHibernate na sua forma tradicional , gerando os arquivos de configuração e mapeamento via código e sem ajudas de ferramentas. Estou fazendo isso para você entender como o NHibernate funciona, depois você pode usar a ferramenta que desejar para ter mais produtividade mas vai estar entendendo o que esta por trás dos panos.
Eu vou usar a última versão disponível do NHibernate, a versão 2.1.2 que pode ser obtida neste link: http://sourceforge.net/projects/nhibernate/
O SharpDevelop 3.1 pode ser obtido aqui: http://www.icsharpcode.net/OpenSource/SD/Download/#SharpDevelop3x
Obs: Se quiser usar o Visual C# 2008 pegue o danado aqui: http://www.microsoft.com/express/vcsharp/
Eu vou criar um exemplo que vai usar dois banco de dados relacionais o SQL Server e o MySQL e portanto você deverá ter instalado os seguintes recursos:
Apesar da quantidade de download você não deve reclamar pois é tudo grátis.
A instalação dos pacotes acima é bem simples e de forma padrão os arquivos são instalados na pasta c:\Arquivos de Programas\
Agora eu vou explicar o que eu pretendo mostrar neste artigo:
A primeira tarefa é criar um banco de dados chamado alomundo e uma tabela chamada empregado no SQL Server e no MySQL. Como o objetivo do artigo não é mostrar como criar o banco de dados eu vou dar as definições de cada tabela para que você mesmo crie as tabelas. Seguem as instruções:
|
Estrutura da tabela
empregado:
- id
- chave primária - |
||||||||||||
A tabela empregado
expressa que cada empregado possui um id
para identificação , um nome e um gerente;
Onde gerente é um campo inteiro que representa o código de identificação de um gerente. |
Abaixo eu mostro a estrutura das tabelas criadas no MySQL e no SQL Server Express:
Tabela empregado criada no MySQL Admnistrator |
Tabela empregado criada no SQL Server Express |
A estrutura da tabela foi definida com uma estrutura bem simples para facilitar a elaboração do exemplo focado no recurso NHibernate.
Estando com todos os recursos instalados e funcionando e com o banco de dados e tabela criados no SQL Server 2008 Express e no MySQL você pode continuar. Havendo qualquer erro verifique e corrija pois caso contrário o exemplo não vai funcionar e você vai ficar perdido.
Criando o projeto no SharpDevelop
Abra o SharpDevelop e crie um novo projeto através do menu Arquivo->Novo->Solução;
Na janela Novo Projeto selecione :
E clique no botão Criar.
Com isso você terá a solução NHibernate_AloMundo criada.
A primeira coisa a fazer e criar uma classe POCO (plain old CLR objects) que vai representar o domínio do nosso negócio, ou seja, a tabela empregado pois o nosso interesse esta em gerenciar empregados, consultando, incluindo, alterando e excluindo-os da nossa base de informação.
Para representar o nosso domínio vamos criar uma classe chamada Empregado em um arquivo Empregado.cs.
Para criar o arquivo selecione o menu Projeto->Adicionar->Novo Item e na janela Novo Arquivo defina:
Ao final clique no botão Criar.
Agora defina a classe Empregado conforme o código abaixo:
using System; namespace NHibernate_AloMundo { /// <summary> /// Description of Empregado. /// </summary> public class Empregado { public int id; public string nome; public Empregado gerente; public string empregadoID() { return string.Format(id + " - " + nome); } } } |
Esta nossa classe possui 3 campos : id, nome e gerente definidas como públicas (public) ( eu sei , eu deveria usar propriedades privadas(private) , mas eu deixei as boas práticas um pouco de lado para tonar nosso exemplo mais fácil (MENOS CÓDIGO), ok. Então deixe como está e lembre-se de NUNCA fazer a mesma coisa na definições das suas classes.)
O id é o campo identificador e permite a nossa aplicação acessar o campo chave primária identidade no banco de dados de um objeto persistente. Se duas instâncias da classe Empregado tiverem o mesmo valor para o identificador elas representam a mesma linha no banco de dados.
A classe também possui um método público chamado empregadoID que retorna o id e o nome do empregado.
Dessa forma instâncias da classe Empregado poderão ser gerenciadas e persistidas pelo NHibernate note que a classe não possui nada de especial e pode ser usada como uma classe comum.
Neste momento temos a nossa tabela empregado e a nossa classe empregado. Os dois recursos estão separados por um rio chamado impedância objeto/relacional e precisamos definir um recurso para o NHibernate saber como eles estão relacionados.
Precisamos portando vincular dois mundos : o mundo dos SGBDs relacionais (a nossa tabela) e o mundo dos Objetos (a nossa classe).
Quem faz esse papel são os arquivos de mapeamento e quase sempre devemos ter um arquivo para cada classe do nosso domínio. Estes arquivos possuem a nomenclatura: nome_da_classe.hbm.xml
No nosso exemplo teremos então um único arquivo de mapeamento chamado : Empregado.hbm.xml
Agora vamos criar o arquivo XML de mapeamento para o NHibernate saber como gerenciar e persistir os objetos relacionados com a tabela do banco de dados.
Para criar o arquivo selecione o menu Projeto->Adicionar->Novo Item e na janela Novo Arquivo defina:
Para encerrar clique no botão Criar.
A seguir defina o seguinte conteúdo no arquivo XML:
<?xml version="1.0"?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true"> <class name="NHibernate_AloMundo.Empregado, NHibernate_AloMundo" lazy="false"> <id name="id" access="field"> <generator class="native" /> </id> <property name="nome" access="field" column="nome"/> <many-to-one access="field" name="gerente" column="gerente" cascade="all"/> </class> </hibernate-mapping> |
Veja abaixo o mesmo arquivo no editor SharpDevelop e note que existe uma definição importante que você deve fazer.
Na janela Propriedades do arquivo, em Construir Ação você deve definir o valor : EmbeddedResource;
Obs: Se você estiver usando uma versão anterior do NHibernate a sintaxe pode ser diferente, principalmente na definição do arquivo de mapeamento.
O arquivo de mapeamento criado informa ao NHibernate o seguinte:
O arquivo de mapeamento é fácil de manter e entender e existem ferramentas que geram estes arquivos conforme você poderá verificar em meus artigos nas referências.
Acompanhe a segunda parte em : C# - Usando o NHibernate 2.1 com SharpDevelop 3.1 e MySQL/SQL Server
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
José Carlos Macoratti