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

More Related Content

What's hot

ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoMarcos Bezerra
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQueryReinaldo Junior
 
Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgridmarcos0512
 
08 LabMM4 - Bases de dados
08 LabMM4 - Bases de dados08 LabMM4 - Bases de dados
08 LabMM4 - Bases de dadosCarlos Santos
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
 
Programação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código FonteProgramação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código Fontethomasdacosta
 
Java Básico :: Java Console
Java Básico :: Java ConsoleJava Básico :: Java Console
Java Básico :: Java ConsoleWesley R. Bezerra
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)Carlos Santos
 

What's hot (16)

Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Labs JavaScript - AIT
Labs JavaScript - AITLabs JavaScript - AIT
Labs JavaScript - AIT
 
ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. Autenticação
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQuery
 
Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgrid
 
08 LabMM4 - Bases de dados
08 LabMM4 - Bases de dados08 LabMM4 - Bases de dados
08 LabMM4 - Bases de dados
 
Ns tutorial so
Ns tutorial soNs tutorial so
Ns tutorial so
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
STRUCTured Type Codes
STRUCTured Type CodesSTRUCTured Type Codes
STRUCTured Type Codes
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Programação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código FonteProgramação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código Fonte
 
Beagajs
BeagajsBeagajs
Beagajs
 
Java Básico :: Java Console
Java Básico :: Java ConsoleJava Básico :: Java Console
Java Básico :: Java Console
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)
 

Similar to Sendo produtivo com NHibernate

Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebBruno Borges
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato Haddad
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBRodrigo Hjort
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaMilfont Consulting
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa FlexEduardo Kraus
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 

Similar to Sendo produtivo com NHibernate (20)

Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento Web
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
NHibernate
NHibernateNHibernate
NHibernate
 
NHibernate
NHibernateNHibernate
NHibernate
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
04_Introducao_JavaScript.pdf
04_Introducao_JavaScript.pdf04_Introducao_JavaScript.pdf
04_Introducao_JavaScript.pdf
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
Aula android 04
Aula android 04Aula android 04
Aula android 04
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa Flex
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 

Sendo produtivo com NHibernate

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