ORM: Sendo produtivo com NHibernate
-
Upload
juliano-oliveira -
Category
Technology
-
view
5.286 -
download
4
description
Transcript of ORM: Sendo produtivo com NHibernate
![Page 1: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/1.jpg)
NHibernateSendo preguiçoso com NHibernate
Juliano Oliveira
![Page 2: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/2.jpg)
Preguiçalembra...
![Page 3: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/3.jpg)
Preguiçalembra...
![Page 4: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/4.jpg)
Preguiçalembra...
![Page 5: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/5.jpg)
NHibernateSendo preguiçoso com NHibernate
Juliano Oliveira
![Page 6: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/6.jpg)
NHibernateSendo preguiçoso com NHibernate
Juliano Oliveira
![Page 7: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/7.jpg)
NHibernateSendo PRODUTIVO com NHibernate
Juliano Oliveira
![Page 8: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/8.jpg)
Ser PRODUTIVO!
![Page 9: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/9.jpg)
Agenda
Tópico 1
Tópico 2
Tópico 3
Tópico 4
![Page 10: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/10.jpg)
Agenda
Mapeando seu modelo
Sendo produtivo com NHibernate
Exemplos práticos: A Hora do Show
Dúvidas
![Page 11: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/11.jpg)
A vida sem ORM
Muito trabalho
Modelar Tabelas
Classes DAL
Objetos DTO
Camada BLL
![Page 12: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/12.jpg)
Camada DAL
public UsuarioDAL{ public ArrayList<Usuario> retornaUsuarios(){ ..... }}Camada BLL
public UsuarioBLL { public ArrayList<Usuario> retornaUsuarios() { UsuarioDAL usuarioDAL = DALFactory.UsuarioDAL.Create(); return usuarioDAL.retornaUsuarios();
} }
Camada DTO
public class Usuario { private String _id; private String _nome;
public String Id() { get { return _id; } }
public String Nome() { get { return nome; } }
public Usuario(String usuarioID, String usuarioNome) {
this.usuarioID = usuarioID; this.usuarioNome = usuarioNome; } }
A vida sem ORM
![Page 13: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/13.jpg)
A vida sem ORM
![Page 14: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/14.jpg)
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
Banco Relacional
ORMEntidades
OO
![Page 15: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/15.jpg)
O NHibernate mais de perto
Framework de ORMPortado do Hibernate escrito em Java para
.NetOpen-sourceLicença LGPL - uso comercialSistema de queries OO
◦HQL◦Criteria API
Gerenciamento de Sessões e Transações
![Page 16: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/16.jpg)
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
![Page 17: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/17.jpg)
O NHibernate mais de perto
ArquiteturaAplicação
Banco de dadosEntidades relacionais
NHibernate
Objetos de Persistência
configuração mapeamento
Configuração de conexão e banco de dados
Mapeamento dos objetos e entidades relacionais
![Page 18: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/18.jpg)
Modele entidades, não tabelasModelando classes
◦Abstrações◦Entidades◦Objetos de Valor◦Coleções
![Page 19: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/19.jpg)
Modele entidades, não tabelas
![Page 20: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/20.jpg)
Mapeando seu modelo
ClasseCliente.cs
Cliente.hbm.xml Banco de dadosTabela Clientes
![Page 21: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/21.jpg)
Mapeando seu modelo
Classe Cliente.cs
public class Cliente{ public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Endereco { get; set; }}
![Page 22: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/22.jpg)
Mapeando seu modelo
Mapeamento Cliente.hbm.xml
<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Cliente" table="Clientes"> <id name="Id" column="idCliente"> <generator class="hilo" /> </id> <property name="Nome" type="String" length="75" /> <property name="Endereco" type="String" length="150" /> </class></hibernate-mapping>
![Page 23: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/23.jpg)
Mapeando seu modelo
Tabela Clientes
![Page 24: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/24.jpg)
Mapeando seu modelo
Tags de mapeamento mais usadas◦class◦id◦property◦many-to-one◦one-to-one◦Tags para coleções
![Page 25: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/25.jpg)
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
![Page 26: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/26.jpg)
Ser PRODUTIVO!
![Page 27: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/27.jpg)
Sendo produtivo com NHibernateFerramenta 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:
Configuration cfg = new Configuration().Configure();SchemaExport generator = new SchemaExport( cfg );generator.Create(true, true);
![Page 28: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/28.jpg)
Sendo produtivo com NHibernateFerramenta 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:
Configuration cfg = new Configuration().Configure();SchemaUpdate update = new SchemaUpdate( cfg );update.Execute(true, true);
![Page 29: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/29.jpg)
Sendo produtivo com NHibernateNunca mais escreva SQL´s
Cliente cliente = _sessao.Get<Cliente>(222);
Selecionar o “Cliente” de código “222”:
![Page 30: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/30.jpg)
Sendo produtivo com NHibernateNunca mais escreva SQL´s
IList<Cliente> cliente;cliente = _sessao.CreateCriteria<Cliente>().List<Cliente>();
Selecionar todos as entidades “Cliente”:
![Page 31: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/31.jpg)
Sendo produtivo com NHibernateNunca mais escreva SQL´s
string strQuery = “from Cliente c where count(c.Pedidos) > 10”;IList<Cliente> cliente = _sessao .CreateQuery(strQuery).List<Cliente>();
Selecionar todos as entidades “Cliente” que tenham comprado mais de 10 vezes:
![Page 32: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/32.jpg)
Sendo produtivo com NHibernateTrabalhe com Objetos
Cliente cliente = new Cliente();cliente.Nome = “Juliano Oliveira”;cliente.Endereço = “São Paulo”;
_sessao.Save(cliente);
![Page 33: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/33.jpg)
Sendo produtivo com NHibernateTrabalhe com Objetos
Cliente cliente = _sessao.Get<Cliente>(222);
cliente.Nome = “Juliano P. Oliveira”;cliente.Endereço = “Barra Funda”;
_sessao.Update(cliente);
![Page 34: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/34.jpg)
Sendo produtivo com NHibernateTrabalhe com Objetosusing(var tx = _sessao.BeginTransaction()) {
Cliente cliente = _sessao.Get<Cliente>(2222); ItemDoPedido itemDoPedido = ItemDoPedidoFactory .Quantidade(2) .Produto(864) .Criar();
Pedido pedido = new Pedido(cliente); pedido.AdicionaItemAoPedido(itemDoPedido);
_sessao.Update(pedido); tx.Commit();}
![Page 35: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/35.jpg)
Sendo produtivo com NHibernateGerencie sua conexão automaticamente
protected void Application_BeginRequest(){ ManagedWebSessionContext.Bind( HttpContext.Current, SessionManager.SessionFactory.OpenSession());}
![Page 36: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/36.jpg)
Sendo produtivo com NHibernateGerencie sua conexão automaticamente
protected void Application_EndRequest() { ISession session = ManagedWebSessionContext.Unbind( HttpContext.Current, SessionManager.SessionFactory);
if (session != null) { if (session.Transaction != null && session.Transaction.IsActive) session.Transaction.Rollback(); else { session.Flush(); session.Close(); } }}
![Page 37: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/37.jpg)
Exemplos práticos: A Hora do Show
![Page 38: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/38.jpg)
Ferramenta NHProf
![Page 39: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/39.jpg)
Referências
Site Oficial do NHibernatehttp://www.nhforge.org/
Blog Ayende Rahienhttp://ayende.com/blog
NHProf – The NHibernate Profilerhttp://www.nhprof.com
Projeto de Tradução da Documentação do NHibernatehttp://nhibernate.programandoem.net
![Page 41: ORM: Sendo produtivo com NHibernate](https://reader036.fdocumentos.tips/reader036/viewer/2022062513/5563a482d8b42a2d538b54ee/html5/thumbnails/41.jpg)
Obrigado!Não esqueçam de entrar no grupo .Net Architects
no Google Gruposhttp://groups.google.com/group/dotnetarchitects