ORM: Sendo produtivo com NHibernate
Upcoming SlideShare
Loading in...5
×
 

ORM: Sendo produtivo com NHibernate

on

  • 7,357 views

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 ...

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.

Statistics

Views

Total Views
7,357
Views on SlideShare
6,495
Embed Views
862

Actions

Likes
5
Downloads
163
Comments
0

7 Embeds 862

http://programandoem.net 804
http://cleberprogrammer.wordpress.com 33
http://www.slideshare.net 20
http://clebito.wordpress.com 2
http://feeds.feedburner.com 1
http://www.programandoem.net 1
http://webcache.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

ORM: Sendo produtivo com NHibernate ORM: Sendo produtivo com NHibernate Presentation Transcript

  • 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