Академический Документы
Профессиональный Документы
Культура Документы
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
Agenda
Dvidas
Agenda
Modelar Tabelas
Camada BLL
Muito trabalho
Classes DAL
Objetos DTO
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; } }
ORM
y y
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
Suporta conceitos de OO
Associao, herana, polimorfismo, colees, etc...
Arquitetura
Aplicao
Objetos de Persistncia
NHibernate
configurao Configurao de conexo e banco de dados mapeamento Mapeamento dos objetos e entidades relacionais
Modelando classes
Abstraes Entidades Objetos de Valor Colees
Classe Cliente.cs
Cliente.hbm.xml
Classe Cliente.cs
public class Cliente { public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Endereco { get; set; } }
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>
Tabela Clientes
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!
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);
Configuration cfg = new Configuration().Configure(); SchemaUpdate update = new SchemaUpdate( cfg ); update.Execute(true, true);
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>();
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(); }
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(); } } }
Ferramenta NHProf
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