Desenvolvimento - C#
Geração automática do mapeamento objeto/relacional para o NHibernate usando MyGeneration
Apresento nesse artigo uma forma bem rápida e simples para gerar o mapeamento objeto/relacional para o NHibernate.
por Marcos Dell AntonioPara os que ainda não conhecem, o NHibernate é um framework para persistência de objetos em um banco de dados relacional. Ou seja, você instancia um objeto, carrega suas propriedades com os valores desejados e manda o NHibernate salvar esse objeto no banco. O NHibernate, através do objeto recebido, monta uma query SQL que será executada no banco de dados desejado.
Todo o processo de geração da query SQL é feito com auxílio dos arquivos de mapeamento. Normalmente para cada tabela do banco de dados são gerados dois arquivos:.hbm.xml e .cs. Aqui é que entra o MyGeneration: ele é um software que gera de forma rápida e simples esses dois arquivos para as tabelas do nosso banco de dados.
Não vou entrar em mais detalhes sobre persistência de objetos com o NHibernate, pois isso é assunto para outro artigo. No final desse, tem alguns links sobre isso.
- Softwares usados
MySQL 5.0 Community Edition: banco de dados que usarei para gerar o mapeamento.
Download: http://dev.mysql.com/downloads/mysql/5.0.html
MySQL Connector 1.0.7: provider .NET para acesso ao MySQL.
Download: http://dev.mysql.com/downloads/connector/net/1.0.html
MyGeneration 1.1.5.1: software que gera o mapeamento.
Download: http://www.mygenerationsoftware.com
- Instalação e configuração dos softwares
Também não vou detalhar a instalação dos softwares, afinal todas são bem intuitivas. Sobre a configuração deles, abaixo segue o que fiz:
MySQL: após instalar o MySQL, criei um banco de dados chamado MapOR e uma tabela chamada Cliente. Vou usar esse banco e essa tabela para criar o mapeamento, mas fique a vontade para criá-lo a partir de qualquer outro banco ou tabela, o processo é o mesmo. Veja na imagem abaixo a tabela criada.
MyGeneration: antes de configurar o MyGeneration instale o provider Connector.
Se no final da instalação do MyGeneration você mandou ele abrir, provavelmente uma janela Default Settings deve ter aparecido. Se você não abriu ainda o MyGeneration ou a tela ainda não apareceu, abra ele agora e no menu Edit clique em Default Settings. Nessa janela será configurado o acesso ao banco MySQL.
Na aba Connection configure o seguinte:
- Em Connection String, no campo Driver selecione MySQL2 e defina a string de conexão de acordo com suas configurações locais. Aqui ficou da seguinte forma:
- Em Language Mapping certifique-se que o campo Language esteja definido como MySQL Connector/Net (C#). Veja como ficou aqui:
- Em Database Target Mapping o campo DbTarget deve estar com o valor MySQL Connector/Net. Veja:
Pronto! O MyGeneration está configurado. Para ver se está funcionando, clique em Test Connection.
Antes de fecharmos a janela de configuração salve o que foi feito. Para isso, digite MySQL no campo Saved Connections e depois clique em Save.
- Gerando os arquivos de mapeamento
Usando o MyGeneration vamos gerar os arquivos .hbm.xml e .cs. Por padrão, o software não vem com os arquivos que precisamos para gerar código para o NHibernate, por isso vamos baixa-los. Todo o processo é muito simples e pode ser realizado de dentro do próprio software.
Clique em File - New - Template Browser. A janela a baixo deverá aparecer:
Veja que, como eu falei anteriormente, não há nenhum arquivo relacionado ao NHibernate.
No Template Browser clique no terceiro botão (Online Template Library - o globo). Ao clicar sobre ele a Online Template Library irá aparecer. É através dela que vou fazer o download do template necessário para gerar os arquivos de mapeamento do NHibernate. Veja abaixo uma imagem da Online Template Library:
Nessa lista de templates procure pela pasta NHibernate. Ao encontrá-la, é possível expandir ela e ver quais templates temos disponível. Veja abaixo os templates que existem atualmente no servidor:
Salve os quatro templates que apareceram clicando no botão salvar (terceiro botão). Não esqueça de manter a pasta NHibernate selecionada antes de clicar no botão salvar.
Agora você já pode fechar essa janela e automaticamente a lista de templates será atualizada para os que estão salvos no seu disco rígido. Se isso não acontecer, clique no primeiro botão (Refresh Template Browser) do Template Browser.
Navegue até a pasta do template do NHibernate e de um duplo clique sobre o último da lista (NHibernate OM - 0.7.1).
Na janela da direta que acabou de abrir será mostrado o código fonte do template selecionado. Qualquer alteração referente a geração do código pode ser feita aí.
Para gerar os dois arquivos de mapeamento (.hbm.xml e .cs) clique no último botão do Template Browser (Execute Template, é uma seta verde). A seguinte janela vai aparecer:
Agora é muito simples. Basta configurar o seguinte:
- Select the output path: local onde serão gerados os arquivos de mapeamento;
- Namespace: nome do namespace que será usado para gerar os arquivos;
- Member variable prefix: prefixo para o nome das variáveis do arquivo .cs;
- Select a database: nome do banco de dados que contem as tabelas que desejamos mapear;
- Select tables: nome da tabela que desejamos gerar os arquivos de mapeamento.
Configurei da seguinte forma:
Agora basta clicar no botão OK e os arquivos serão gerados. No meu caso, foram gerados na pasta c:\MapOR. Veja na imagem abaixo:
Se você der uma olhada no arquivo Cliente.cs, verá que além da declaração das propriedades representando cada campo da tabela Cliente, existem algumas validações, propriedades e métodos que foram gerados automaticamente. Para remover isso, é necessário desmarcar algumas opções na hora de gerar os arquivos de mapeamento.
Também é muito simples editar o template para definir exatamente o que será gerado.
- Conclusão
Produtividade é um fator muito importante no nosso trabalho. Portanto, tudo o que for possível automatizar vai nos poupar tempo. É essa a idéia do MyGeneration.
- Referências
MyGeneration - Code Generation, O/R Mapping and Architectures: site oficial do MyGeneration. Recomendo uma visita ao fórum em caso de dúvidas, pois o pessoal além de responder rapidamente, conhecem muito bem do assunto e sempre passam algumas dicas.
Link: http://www.mygenerationsoftware.com/
NHibernate: site oficial do NHibernate, que recentemente se uniu ao Hibernate. Também recomendo uma visita ao fórum em caso de dúvidas.
Link: http://www.nhibernate.org
Persistência de dados com NHibernate: artigo do site EnterpriseGuys que dá uma excelente introdução ao assunto. Foi lá que eu conheci o MyGeneration.
Link: http://www.enterpriseguys.com/Artigos.aspx?ColunaID=1
Guia inicial do NHibernate: tradução do guia inicial oficial do NHibernate.
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=546