0
NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
Preguiçalembra...<br />
Preguiçalembra...<br />
Preguiçalembra...<br />
NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
NHibernate<br />Sendo produtivocom NHibernate<br />Juliano Oliveira<br />
Ser PRODUTIVO!<br />
Agenda<br />
Agenda<br />
A vida sem ORM<br />
Camada DAL<br />publicUsuarioDAL{ public ArrayList&lt;Usuario&gt; retornaUsuarios(){    .....  }<br />}<br />Camada DTO<br...
A vida sem ORM<br />
ORM<br />ORM é Mapeamento de Objeto-Relacional<br />A proposta do ORM<br />Resolver a impedância entre OO e ER<br />Facili...
O NHibernate mais de perto<br />Framework de ORM<br />Portado do Hibernate escrito em Java para .Net<br />Open-source<br /...
O NHibernate mais de perto<br />Suporta conceitos de OO<br />Associação, herança, polimorfismo, coleções, etc...<br />Supo...
O NHibernate mais de perto<br />Arquitetura<br />Aplicação<br />Objetos de Persistência<br />NHibernate<br />configuração<...
Modele entidades, não tabelas<br />Modelando classes<br />Abstrações<br />Entidades<br />Objetos de Valor<br />Coleções<br />
Modele entidades, não tabelas<br />
Mapeando seu modelo<br />Cliente.hbm.xml<br />Classe<br />Cliente.cs<br />Banco de dados<br />Tabela Clientes<br />
Mapeando seu modelo<br />Classe Cliente.cs<br />publicclassCliente<br />{<br />public virtual intId { get; set; }<br />pub...
Mapeando seu modelo<br />Mapeamento Cliente.hbm.xml<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;...
Mapeando seu modelo<br />Tabela Clientes<br />
Mapeando seu modelo<br />Tags de mapeamento mais usadas<br />class<br />id<br />property<br />many-to-one<br />one-to-one<...
Mapeando seu modelo<br />Tags de mapeamento para coleções<br />set<br />coleção de itens únicos<br />bag <br />coleção de ...
Ser PRODUTIVO!<br />
Sendo produtivo com NHibernate<br />Ferramenta de exportação e atualização das tabelas do banco de dados<br />Com seu mode...
Sendo produtivo com NHibernate<br />Ferramenta de exportação e atualização das tabelas do banco de dados<br />Mudança no m...
Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar o “Cliente” de código “222”:<br />Clienteclie...
Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar todos as entidades “Cliente”:<br />IList&lt;C...
Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar todos as entidades “Cliente” que tenham compr...
Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />Clientecliente = newCliente();<br />cliente.Nome = “Juliano ...
Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />Cliente cliente = _sessao.Get&lt;Cliente&gt;(222); <br />cli...
Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />using(vartx = _sessao.BeginTransaction()) {<br />Cliente cli...
Sendo produtivo com NHibernate<br />Gerencie sua conexão automaticamente<br />protectedvoidApplication_BeginRequest()<br /...
Sendo produtivo com NHibernate<br />Gerencie sua conexão automaticamente<br />protectedvoidApplication_EndRequest() {<br /...
Exemplos práticos: A Hora do Show<br />
Ferramenta NHProf<br />
Site Oficial do NHibernatehttp://www.nhforge.org/<br />Blog AyendeRahien<br />http://ayende.com/blog<br />NHProf – The NHi...
Dúvidas ?!<br />Juliano Oliveira<br />jul.oliveira@gmail.com<br />http://programandoem.net<br />twitter: @juloliveira<br />
Obrigado!<br />Não esqueçam de entrar no grupo .Net Architects<br />no Google Grupos<br />http://groups.google.com/group/d...
Upcoming SlideShare
Loading in...5
×

ORM: Sendo produtivo com NHibernate

5,324

Published on

Frameworks de mapeamento de objeto-relacional (ORM) são hoje ferramentas indispensáveis nos projetos de desenvolvimento de sistemas. E em se tratando de frameworks de ORM, um dos mais conhecidos e utilizados pela comunidade é o NHibernate.
Nessa apresentação você verá os principais pontos que fazem dos frameworks de ORM e do NHibernate ferramentas tão importantes nos projetos, desmistificar seus maiores mitos, os principais recursos, ferramentas de análise (NHProof) e verá também como ser produtivo com o NHibernate.

Published in: Technology, Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,324
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
172
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Transcript of "ORM: Sendo produtivo com NHibernate"

  1. 1. NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
  2. 2. Preguiçalembra...<br />
  3. 3. Preguiçalembra...<br />
  4. 4. Preguiçalembra...<br />
  5. 5. NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
  6. 6. NHibernate<br />Sendo preguiçoso com NHibernate<br />Juliano Oliveira<br />
  7. 7. NHibernate<br />Sendo produtivocom NHibernate<br />Juliano Oliveira<br />
  8. 8. Ser PRODUTIVO!<br />
  9. 9. Agenda<br />
  10. 10. Agenda<br />
  11. 11. A vida sem ORM<br />
  12. 12. Camada DAL<br />publicUsuarioDAL{ public ArrayList&lt;Usuario&gt; retornaUsuarios(){ ..... }<br />}<br />Camada DTO<br />publicclassUsuario { private String _id;<br />private String _nome;<br />public String Id() { get { return _id; } } public String Nome() { get { return nome; } } <br />publicUsuario(String usuarioID, String usuarioNome) { this.usuarioID = usuarioID; this.usuarioNome = usuarioNome; } }<br />Camada BLL<br />publicUsuarioBLL<br />{ public ArrayList&lt;Usuario&gt; retornaUsuarios()<br /> { UsuarioDALusuarioDAL = DALFactory.UsuarioDAL.Create();<br />returnusuarioDAL.retornaUsuarios(); } }<br />A vida sem ORM<br />
  13. 13. A vida sem ORM<br />
  14. 14. ORM<br />ORM é Mapeamento de Objeto-Relacional<br />A proposta do ORM<br />Resolver a impedância entre OO e ER<br />Facilitar o acesso a dados<br />Tornar o trabalho mais Orientado a Objetos<br />
  15. 15. O NHibernate mais de perto<br />Framework de ORM<br />Portado do Hibernate escrito em Java para .Net<br />Open-source<br />Licença LGPL - uso comercial<br />Sistema de queries OO<br />HQL<br />Criteria API<br />Gerenciamento de Sessões e Transações<br />
  16. 16. O NHibernate mais de perto<br />Suporta conceitos de OO<br />Associação, herança, polimorfismo, coleções, etc...<br />Suporta a maior parte dos banco de dados relacionais do mercado<br />SQL Server, Oracle, MySQL, PostgreSQL, SQLite, etc ...<br />Perfeito para uma arquitetura como o DDD<br />
  17. 17. O NHibernate mais de perto<br />Arquitetura<br />Aplicação<br />Objetos de Persistência<br />NHibernate<br />configuração<br />mapeamento<br />Mapeamento dos objetos e entidades relacionais<br />Configuração de conexão e banco de dados<br />Banco de dados<br />Entidades relacionais<br />
  18. 18. Modele entidades, não tabelas<br />Modelando classes<br />Abstrações<br />Entidades<br />Objetos de Valor<br />Coleções<br />
  19. 19. Modele entidades, não tabelas<br />
  20. 20. Mapeando seu modelo<br />Cliente.hbm.xml<br />Classe<br />Cliente.cs<br />Banco de dados<br />Tabela Clientes<br />
  21. 21. Mapeando seu modelo<br />Classe Cliente.cs<br />publicclassCliente<br />{<br />public virtual intId { get; set; }<br />public virtual string Nome { get; set; }<br />public virtual string Endereco { get; set; }<br />}<br />
  22. 22. Mapeando seu modelo<br />Mapeamento Cliente.hbm.xml<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;<br />&lt;hibernate-mappingxmlns=&quot;urn:nhibernate-mapping-2.2&quot;&gt;<br /> &lt;classname=&quot;Cliente&quot; table=&quot;Clientes&quot;&gt;<br /> &lt;id name=&quot;Id&quot; column=&quot;idCliente&quot;&gt;<br /> &lt;generatorclass=&quot;hilo&quot; /&gt;<br /> &lt;/id&gt;<br /> &lt;property name=&quot;Nome&quot; type=&quot;String&quot; length=&quot;75&quot; /&gt;<br /> &lt;property name=&quot;Endereco&quot; type=&quot;String&quot; length=&quot;150&quot; /&gt;<br /> &lt;/class&gt;<br />&lt;/hibernate-mapping&gt;<br />
  23. 23. Mapeando seu modelo<br />Tabela Clientes<br />
  24. 24. Mapeando seu modelo<br />Tags de mapeamento mais usadas<br />class<br />id<br />property<br />many-to-one<br />one-to-one<br />Tags para coleções<br />
  25. 25. Mapeando seu modelo<br />Tags de mapeamento para coleções<br />set<br />coleção de itens únicos<br />bag <br />coleção de itens que podem se repetir<br />list <br />uma “bag” indexada por um número inteiro<br />map<br />uma “bag” indexada por um valor qualquer<br />
  26. 26. Ser PRODUTIVO!<br />
  27. 27. Sendo produtivo com NHibernate<br />Ferramenta de exportação e atualização das tabelas do banco de dados<br />Com seu modelo pronto, crie suas tabelas no banco de dados com o seguinte comando:<br />Configurationcfg = newConfiguration().Configure();<br />SchemaExportgenerator = newSchemaExport( cfg );<br />generator.Create(true, true);<br />
  28. 28. Sendo produtivo com NHibernate<br />Ferramenta de exportação e atualização das tabelas do banco de dados<br />Mudança no modelo? Fácil! <br />Atualize o banco de dados com o seguinte comando:<br />Configurationcfg = newConfiguration().Configure();<br />SchemaUpdateupdate = newSchemaUpdate( cfg );<br />update.Execute(true, true);<br />
  29. 29. Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar o “Cliente” de código “222”:<br />Clientecliente = _sessao.Get&lt;Cliente&gt;(222);<br />
  30. 30. Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar todos as entidades “Cliente”:<br />IList&lt;Cliente&gt; cliente;<br />cliente = _sessao.CreateCriteria&lt;Cliente&gt;().List&lt;Cliente&gt;();<br />
  31. 31. Sendo produtivo com NHibernate<br />Nunca mais escreva SQL´s<br />Selecionar todos as entidades “Cliente” que tenham comprado mais de 10 vezes:<br />stringstrQuery = “from Cliente c wherecount(c.Pedidos) &gt; 10”;<br />IList&lt;Cliente&gt; cliente = _sessao<br /> .CreateQuery(strQuery).List&lt;Cliente&gt;();<br />
  32. 32. Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />Clientecliente = newCliente();<br />cliente.Nome = “Juliano Oliveira”;<br />cliente.Endereço = “São Paulo”;<br />_sessao.Save(cliente);<br />
  33. 33. Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />Cliente cliente = _sessao.Get&lt;Cliente&gt;(222); <br />cliente.Nome = “Juliano P. Oliveira”;<br />cliente.Endereço = “Barra Funda”;<br />_sessao.Update(cliente);<br />
  34. 34. Sendo produtivo com NHibernate<br />Trabalhe com Objetos<br />using(vartx = _sessao.BeginTransaction()) {<br />Cliente cliente = _sessao.Get&lt;Cliente&gt;(2222);<br />ItemDoPedidoitemDoPedido = ItemDoPedidoFactory<br /> .Quantidade(2)<br /> .Produto(864)<br /> .Criar();<br />Pedidopedido = newPedido(cliente);<br /> pedido.AdicionaItemAoPedido(itemDoPedido);<br /> _sessao.Update(pedido);<br />tx.Commit();<br />}<br />
  35. 35. Sendo produtivo com NHibernate<br />Gerencie sua conexão automaticamente<br />protectedvoidApplication_BeginRequest()<br />{<br />ManagedWebSessionContext.Bind(<br />HttpContext.Current,<br />SessionManager.SessionFactory.OpenSession());<br />}<br />
  36. 36. Sendo produtivo com NHibernate<br />Gerencie sua conexão automaticamente<br />protectedvoidApplication_EndRequest() {<br />ISessionsession = ManagedWebSessionContext.Unbind(<br />HttpContext.Current, SessionManager.SessionFactory);<br />if (session != null) {<br />if (session.Transaction != null && session.Transaction.IsActive)<br />session.Transaction.Rollback();<br />else {<br />session.Flush();<br />session.Close();<br /> }<br /> }<br />}<br />
  37. 37. Exemplos práticos: A Hora do Show<br />
  38. 38. Ferramenta NHProf<br />
  39. 39. Site Oficial do NHibernatehttp://www.nhforge.org/<br />Blog AyendeRahien<br />http://ayende.com/blog<br />NHProf – The NHibernate Profiler<br />http://www.nhprof.com<br />Projeto de Tradução da Documentação do NHibernate<br />http://nhibernate.programandoem.net<br />Referências<br />
  40. 40. Dúvidas ?!<br />Juliano Oliveira<br />jul.oliveira@gmail.com<br />http://programandoem.net<br />twitter: @juloliveira<br />
  41. 41. Obrigado!<br />Não esqueçam de entrar no grupo .Net Architects<br />no Google Grupos<br />http://groups.google.com/group/dotnetarchitects<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×