Вы находитесь на странице: 1из 41

NHibernate

Sendo preguioso com NHibernate Juliano Oliveira

Preguia lembra...

Preguia lembra...

Preguia lembra...

NHibernate
Sendo preguioso com NHibernate Juliano Oliveira

NHibernate
Sendo preguioso com NHibernate Juliano Oliveira

NHibernate
Sendo

PRODUTIVO

com NHibernate

Juliano Oliveira

Ser

PRODUTIVO!

ORM

A vida sem ORM

NHibernate mais de perto

Modele entidades, no tabelas

Agenda

Mapeando seu modelo

Sendo produtivo com NHibernate

Exemplos prticos: A Hora do Show

Dvidas

Agenda

Modelar Tabelas

Camada BLL

Muito trabalho

Classes DAL

Objetos DTO

A vida sem ORM

Camada DAL public UsuarioDAL{ public ArrayList<Usuario> retornaUsuarios(){ ..... } Camada DTO }
Camada BLL public UsuarioBLL { public ArrayList<Usuario> retornaUsuarios() { UsuarioDAL usuarioDAL = DALFactory.UsuarioDAL.Create(); return usuarioDAL.retornaUsuarios(); } }

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

A vida sem ORM

ORM
y y

ORM MAPEAMENTO A proposta do ORM

DE

OBJETO-RELACIONAL

Resolver a impedncia entre OO e ER Facilitar o acesso a dados Tornar o trabalho mais ORIENTADO A OBJETOS

Banco Relacional

ORM

Entidades OO

O NHibernate mais de perto


Framework de ORM y Portado do Hibernate escrito em Java para .Net y Open-source y Licena LGPL - uso comercial y Sistema de queries OO
y

HQL Criteria API


y

Gerenciamento de Sesses e Transaes

O NHibernate mais de perto


y

Suporta conceitos de OO
Associao, herana, polimorfismo, colees, 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


y

Arquitetura

Aplicao
Objetos de Persistncia

NHibernate
configurao Configurao de conexo e banco de dados mapeamento Mapeamento dos objetos e entidades relacionais

Banco de dados Entidades relacionais

Modele entidades, no tabelas


y

Modelando classes
Abstraes Entidades Objetos de Valor Colees

Modele entidades, no tabelas

Mapeando seu modelo

Classe Cliente.cs

Cliente.hbm.xml

Banco de dados Tabela Clientes

Mapeando seu modelo


y

Classe Cliente.cs

public class Cliente { public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Endereco { get; set; } }

Mapeando seu modelo


y

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>

Mapeando seu modelo


y

Tabela Clientes

Mapeando seu modelo


y Tags

de mapeamento mais usadas

class id property many-to-one one-to-one Tags para colees

Mapeando seu modelo


y

Tags de mapeamento para colees


set
x coleo de itens nicos

bag
x coleo de itens que podem se repetir

list
x uma bag indexada por um nmero inteiro

map
x uma bag indexada por um valor qualquer

Ser

PRODUTIVO!

Sendo produtivo com NHibernate


y

Ferramenta de exportao e atualizao 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);

Sendo produtivo com NHibernate


y

Ferramenta de exportao e atualizao das tabelas do banco de dados

Mudana no modelo? Fcil! Atualize o banco de dados com o seguinte comando:

Configuration cfg = new Configuration().Configure(); SchemaUpdate update = new SchemaUpdate( cfg ); update.Execute(true, true);

Sendo produtivo com NHibernate


y

Nunca mais escreva SQL s

Selecionar o Cliente de cdigo 222 :

Cliente cliente = _sessao.Get<Cliente>(222);

Sendo produtivo com NHibernate


y

Nunca mais escreva SQL s

Selecionar todos as entidades Cliente :

IList<Cliente> cliente; cliente = _sessao.CreateCriteria<Cliente>().List<Cliente>();

Sendo produtivo com NHibernate


y

Nunca mais escreva SQL s

Selecionar todos as entidades Cliente que tenham comprado mais de 10 vezes: string strQuery = from Cliente c where count(c.Pedidos) > 10 ; IList<Cliente> cliente = _sessao .CreateQuery(strQuery).List<Cliente>();

Sendo produtivo com NHibernate


y

Trabalhe com Objetos


Cliente cliente = new Cliente(); cliente.Nome = Juliano Oliveira ; cliente.Endereo = So Paulo ; _sessao.Save(cliente);

Sendo produtivo com NHibernate


y

Trabalhe com Objetos


Cliente cliente = _sessao.Get<Cliente>(222); cliente.Nome = Juliano P. Oliveira ; cliente.Endereo = Barra Funda ; _sessao.Update(cliente);

Sendo produtivo com NHibernate


y

Trabalhe com Objetos

using(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(); }

Sendo produtivo com NHibernate


y

Gerencie sua conexo automaticamente

protected void Application_BeginRequest() { ManagedWebSessionContext.Bind( HttpContext.Current, SessionManager.SessionFactory.OpenSession()); }

Sendo produtivo com NHibernate


y

Gerencie sua conexo 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(); } } }

Exemplos prticos: A Hora do Show

Ferramenta NHProf

Site Oficial do NHibernate

Blog Ayende Rahien

NHProf The NHibernate Profiler

Projeto de Traduo da Documentao do NHibernate

Referncias

Dvidas ?!
Juliano Oliveira
jul.oliveira@gmail.com http://programandoem.net twitter: @juloliveira

Obrigado!
No esqueam de entrar no grupo .Net Architects no Google Grupos http://groups.google.com/group/dotnetarchitects

Вам также может понравиться