Escolar Documentos
Profissional Documentos
Cultura Documentos
usando o NHibernate
Apresento neste artigo como criar uma aplicao web totalmente orientada a objetos usando o
framework NHibernate e a linguagem C#.
Nossa meta construir um website com um cadastro de atividades usando os novos controles
GridView e ObjectDataSource, ambos presentes no Framework .NET 2.0. A aplicao possuir as
funcionalidades bsicas de um cadastro, sendo elas: consultar, inserir, editar e remover. Um detalhe
muito importante que nenhuma linha de cdigo SQL ser escrita devido ao uso do NHibernate.
Para desenvolver esta aplicao vamos usar as seguintes ferramentas:
- Visual Studio 2005 (pode ser o Visual Web Developer 2005 Express Edition)
Link: http://msdn.microsoft.com/vstudio/express/vwd/
- MySQL 5.0 Community Edition
Link: http://dev.mysql.com/downloads/mysql/5.0.html
- MySQL Connector 1.0.7: provider pra acessar o MySQL
Link: http://dev.mysql.com/downloads/connector/net/1.0.html
- MyGeneration 1.1.5.1: ferramenta para gerar o mapeamento objeto/relacional para o NHibernate
Link: http://www.mygenerationsoftware.com
- NHibernate 1.0.2: framework para persistncia dos objetos
Link: http://www.nhibernate.org
- Instalao e configurao das ferramentas
Depois de fazer o download de todas as ferramentas citadas acima, instale o MySQL, crie um banco
de dados chamado WebAppOO e uma tabela chamada Atividade com os seguintes campos:
- Id - Int (primary key)
- Nome - Varchar(50), Not null
- Descrio - Varchar(200), Not null
Deve ficar assim:
Clique no boto OK e uma soluo vazia ser criada. Agora crie um website, clicando com o boto
direito do mouse sobre a soluo recm criada, escolha Add - New Web Site. Deixe selecionado o
template ASP.NET Web Site e na localizao coloque c:\ProjetosVS\ProjetoWeb\WebAppOO.
Deve ficar da seguinte forma:
Clique em OK para criar o website. Agora vamos montar a nossa interface. Deixe o arquivo
Default.aspx com a seguinte aparncia:
Todo esse cdigo acima referente a configurao do NHibernate. Se por acaso pretendermos
mudar o banco de dados da aplicao, basta alterar algumas das linhas acima.
- Mapeamento objeto/relacional
Como mencionado anteriormente, no vou entrar em detalhes sobre o MyGeneration. Uma
documentao detalhada sobre ele pode ser encontrada nas referncias desse artigo.
Faremos o mapeamento em um outro projeto, chamado MapeamentoOR. Para isso, clique com o
boto direito sobre a Solution, escolha Add - New Project, selecione o template Class Library, digite
o nome MapeamentoOR e defina o campo Location para C:\ProjetosVS\ProjetoWeb. Veja como
deve ficar:
Clique em OK e logo que o projeto MapeamentoOR for criado, remova o arquivo Class1.cs que ele
gerou automaticamente.
Veja abaixo os arquivos .hbm.xml e .cs que compem o mapeamento da tabela Atividade.
Atividade.hbm.xml
A declarao das propriedades Nome e Descricao simplesmente implementam o get e set para a
respectiva varivel private. Tome como exemplo a propriedade Id. Ambos os arquivos foram
gerados com o MyGeneration. Entretanto, fiz algumas alteraes aps a gerao, como por exemplo,
as checagens nos mtodos get e set. A princpio isso no necessrio. Somente as fiz para poder
mostrar o cdigo aqui, caso contrrio ficariam gigantes.
Os dois arquivos devem ser adicionados ao projeto MapeamentoOR e o Atividade.hbm.xml deve ter
a propriedade Build Action configurada para Embedded Resource. Para isso, clique com o boto
direito sobre ele no Solution Explorer e escolha Properties. Logo abaixo aparecero as propriedades
desse arquivo. Configure-as desta forma:
Se tudo estiver correto, efetue o Build clicando com o boto direito sobre MapeamentoOR e
escolhendo a opo Build. Depois disso, uma dll chamada MapeamentoOR.dll ser gerada.
No projeto principal (WebAppOO), vamos adicionar uma referncia dll gerada. Clique com o
boto direito sobre ele e escolha Add Reference. Navegue at a aba Projects e l estar a dll do
projeto MapeamentoOR. Veja:
Selecione essa dll e clique em OK. A partir de agora poderemos acessar o mapeamento
objeto/relacional de dentro do website WebAppOO.
- Classe Helper para o NHibernate
Como o NHibernate ser acessado vrias vezes pela nossa aplicao, nada mais sensato do que criar
uma classe com mtodos para facilitar o nosso trabalho. Para a aplicao em questo, precisamos
somente de um mtodo: GetSession(). Ele nos retornar uma sesso com o NHibernate, que
corresponde a uma conexo com o banco de dados.
Alm de facilitar nossa vida nas chamadas ao NHibernate, essa classe ser responsvel por manter
na memria somente uma instncia do mapeamento objeto/relacional. De acordo com a
documentao do prprio framework, o processo de carga do mapeamento muito pesado, portanto
recomenda-se que somente uma instncia do mesmo seja compartilhada entre as requisies.
Tendo em vista esse problema, logo nos surge a idia de usar um dos vrios padres de projeto, o
Singleton. A finalidade desse padro permitir que somente uma instncia de determinada classe
esteja na memria.
Antes de criar a classe helper, precisamos adicionar uma referncia ao arquivo NHibernate.dll ao
WebAppOO. Para isso, clique com o boto direito sobre o projeto WebAppOO e selecione Add
Reference. Navegue at a pasta onde o NHibernate foi descompactado, procure pela pasta bin e
dentro desta procure pelo arquivo NHibernate.dll. Clique em OK.
Aps adicionar essa referncia, o projeto deve ter ficado da seguinte forma:
vo trabalhar com objetos, ou seja, para inserir uma atividade, por exemplo, no ser usada uma
query SQL, mas sim uma funcionalidade do NHibernate que recebe um objeto e gera a query.
Adicione o arquivo AtividadeDAO.cs na pasta App_Code do projeto WebAppOO. Assim que ele for
criado, j inclua os namespaces System.Collections, NHibernate e MapeamentoOR na sesso using.
Agora vamos codificar todos os mtodos necessrios classe AtividadeDAO. Vamos precisar dos
seguintes mtodos:
- RetornaAtividades(): retorna todas as atividades cadastradas na tabela Atividade. Ele recebe trs
parmetros: column, maximumRows e startRowIndex. O primeiro serve para executar a ordenao e
os dois ltimos a paginao. Cdigo:
Vale a pena ressaltar que a varivel sql no est recebendo um comando SQL, mas sim HQL, que
prprio do NHibernate. Logo, poderia ter sido chamada de hql ao invs de sql.
- SalvaAtividade(): recebe como parmetro um objeto do tipo Atividade e salva ele usando o
NHibernate. Cdigo:
- ExcluirAtividade(): recebe como parmetro uma atividade a ser excluda e exclui ela. Cdigo:
Repare novamente que no fiz nenhuma configurao em especial, somente alterei a ID dos
controles e o Text.
Agora vamos implementar os eventos relacionados ao boto Salvar e Cancelar. Antes disso, adicione
o using MapeamentoOR.
No boto cancelar, basta dar um duplo clique sobre ele e adicionar o seguinte cdigo ao evento
Click:
No boto Salvar, tambm com um duplo clique, adicione o seguinte cdigo ao evento Click:
Pronto! A est o nosso cadastro de atividades. Rode a aplicao e clique no link Inserir Atividade.
Cadastre algumas atividades e veja o resultado:
O processo para editar uma atividade semelhante ao de inserir. Para facilitar as coisas, vou usar
outro arquivo chamado EditarAtividade.aspx. Entretanto, acho que a forma mais correta de fazer isso
seria usando um mesmo arquivo para inserir e editar, afinal os campos sempre sero os mesmos.
Desta forma, adicione outro Web Form a nossa aplicao e chame-o de EditarAtividade.aspx. Aps
a criao deste web form, adicione o using MapeamentoOR a ele.
Novamente, defina o Default.aspx como a pgina inicial (boto direito sobre o arquivo Default.aspx
e selecione a opo Set As Start Page).
A interface do EditarAtividade.aspx deve ficar desta forma:
- No boto Salvar, duplo clique sobre ele e o cdigo do evento Click este:
- E, finalmente, no boto excluir, duplo clique sobre ele e o cdigo do evento Click o este:
Agora que j temos os cdigos de todos os botes implementados, ficou faltando somente um
detalhe: como que vou selecionar a atividade que eu desejo editar ou excluir?
Se voc percebeu, existe um boto na grid chamado Select (inclusive esse nome pode ser
personalizado). At agora no falei sobre ele, pois no era o momento. Esse boto ser programado
para funcionar da seguinte maneira: assim que o usurio clicar sobre ele, ser redirecionado para o
arquivo EditarAtividade.aspx. Para que isso seja possvel vamos implementar o evento
SelectedIndexChanged da nossa grid (no arquivo Default.aspx). Clique com o boto direito sobre a
grid, selecione Properties e de um duplo clique no evento SelectedIndexChanged (tome cuidado para
no clicar no SelectedIndexChanging que tem uma funo totalmente diferente). Este evento dever
ser implementado da seguinte forma:
O SelectedIndexChanged ser disparado sempre que o usurio clicar no boto selecte de uma das
linhas da grid. Ao entrar no evento, ele pega a linha que o usurio clicou e o redireciona para a
pgina de edio de atividades, que a EditarAtividade.aspx. Veja que a Id da atividade selecionada
(row.Cells[1].Text) passada como parmetro, por tanto no arquivo EditarAtividade.aspx possvel
carregar uma atividade para ser editada. Para que isso acontea, abra o EditarAtividade.aspx e de um
duplo clique no web form (alguma parte que no tenha nenhum controle). O evento Page_Load que
foi criado dever possuir a seguinte implementao:
Este evento simplesmente carrega a atividade no form para ser editada ou excluda. O mtodo
CarregaAtividade deve estar implementado nesse mesmo arquivo da seguinte forma:
isso! Nosso website com as funes de consultar, inserir, remover e editar est pronto. Para ver
como ficou, rode a aplicao e navegue atravs dos links Select e Inserir Atividade.
- Concluso
Esse artigo foi inspirado pelos dias de estudo dedicados plataforma .NET. Depois de passar alguns
dias procurando a receita de bolo para como construir um website da melhor maneira possvel,
cheguei concluso que existem vrias formas de alcanar esse objetivo. Como dizia Raul Seixas:
"J fui catlico, budista, protestante,
Tenho livros na estante, todos tm explicao."
Em outras palavras, todo mundo defende a sua maneira de pensar, pena que nenhuma delas envolvia
NHibernate e ObjectDataSource.
Enfim, caso tenham alguma dvida sintam-se a vontade para entrar em contato.
- Referncias
NHibernate - Guia inicial
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=546
Hibernate 3 - Introduo
Link: http://www.guj.com.br/java.tutorial.artigo.174.1.guj
Hibernate 3 - Avanado
Link: http://www.guj.com.br/java.tutorial.artigo.181.1.guj
MyGeneration - Gerao do mapeamento objeto/relacional
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=914
Read more: http://www.linhadecodigo.com.br/artigo/917/criando-uma-aplicacao-web-em-csharp-usando-onhibernate.aspx#ixzz3dqa0quIR