O documento discute o uso do framework ORM NHibernate para mapear objetos a tabelas de banco de dados de forma produtiva. Ele explica como configurar e mapear classes, utilizar ferramentas para gerar e atualizar tabelas, executar queries e manipular objetos no banco de dados de forma orientada a objetos.
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
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(); } } }
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