orm: sendo produtivo com nhibernate

41
NHibernate Sendo preguiçoso com NHibernate Juliano Oliveira

Upload: juliano-oliveira

Post on 26-May-2015

5.284 views

Category:

Technology


4 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: ORM: Sendo produtivo com NHibernate

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

Page 2: ORM: Sendo produtivo com NHibernate

Preguiçalembra...

Page 3: ORM: Sendo produtivo com NHibernate

Preguiçalembra...

Page 4: ORM: Sendo produtivo com NHibernate

Preguiçalembra...

Page 5: ORM: Sendo produtivo com NHibernate

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

Page 6: ORM: Sendo produtivo com NHibernate

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

Page 7: ORM: Sendo produtivo com NHibernate

NHibernateSendo PRODUTIVO com NHibernate

Juliano Oliveira

Page 8: ORM: Sendo produtivo com NHibernate

Ser PRODUTIVO!

Page 9: ORM: Sendo produtivo com NHibernate

Agenda

Tópico 1

Tópico 2

Tópico 3

Tópico 4

Page 10: ORM: Sendo produtivo com NHibernate

Agenda

Mapeando seu modelo

Sendo produtivo com NHibernate

Exemplos práticos: A Hora do Show

Dúvidas

Page 11: ORM: Sendo produtivo com NHibernate

A vida sem ORM

Muito trabalho

Modelar Tabelas

Classes DAL

Objetos DTO

Camada BLL

Page 12: ORM: Sendo produtivo com NHibernate

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

A vida sem ORM

Page 14: ORM: Sendo produtivo com NHibernate

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

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

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

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

Modele entidades, não tabelasModelando classes

◦Abstrações◦Entidades◦Objetos de Valor◦Coleções

Page 19: ORM: Sendo produtivo com NHibernate

Modele entidades, não tabelas

Page 20: ORM: Sendo produtivo com NHibernate

Mapeando seu modelo

ClasseCliente.cs

Cliente.hbm.xml Banco de dadosTabela Clientes

Page 21: ORM: Sendo produtivo com NHibernate

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

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

Mapeando seu modelo

Tabela Clientes

Page 24: ORM: Sendo produtivo com NHibernate

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

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

Ser PRODUTIVO!

Page 27: ORM: Sendo produtivo com NHibernate

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

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

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

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

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

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

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

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

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

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

Exemplos práticos: A Hora do Show

Page 38: ORM: Sendo produtivo com NHibernate

Ferramenta NHProf

Page 39: ORM: Sendo produtivo com NHibernate

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 40: ORM: Sendo produtivo com NHibernate

Dúvidas ?!

Juliano [email protected]

http://programandoem.nettwitter: @juloliveira

Page 41: ORM: Sendo produtivo com NHibernate

Obrigado!Não esqueçam de entrar no grupo .Net Architects

no Google Gruposhttp://groups.google.com/group/dotnetarchitects