introdução ao nhibernate
DESCRIPTION
This is a presentation done for NetPonto which is the most active Portuguese .NET community. It provided an introduction to O/R mapping in general and the NHibernate framework in particular.TRANSCRIPT
Introdução ao NHibernateLuís Amorim
http://netponto.org3ª Reunião Presencial - 17/10/2009
Luís Amorim
7 anos de experiência profissional em TI
Licenciado em Engenharia de Sistemas e Informática
Experiência profissional no desenvolvimento de software
Utilização de tecnologias Microsoft .NET e Java
Agenda
• Introdução
• O que é o NHibernate?
• Funcionamento do NHibernate
• NHibernate na prática
• Conclusão
Introdução: DAL
• Persistir dados e disponibilizar operações de CRUD
• Permitir a execução de queriesavançadas
Introdução: DAL
• Disponibilizar uma semântica transaccional
• Garantir integridade da informação em cenários de concorrência
Introdução: O/RM
• API para operações de CRUD
• Query model e query language para a definição de queries
• API para mapear metadados (classes e tabelas, propriedades e colunas)
NHibernate: O que é?
• Framework O/RM
• Permite mapear classes .NET para tabelas de uma base de dados
• Permite expressar queries utilizando HQL, SQL, objectos Criteria/Example
Classes persistentes
• Plain Old CLR Objects (POCOs)
• Propriedades read/write para todos os campos persistentes
• Definição de um constructor por defeito (sem argumentos)
Classes persistentes
• Definição de uma propriedade que guarde a chave primária (opcional)
• Preferência por classes não sealed e métodos virtuais (opcional)
• Implementação dos métodos Equals() e GetHashCode()
Classes Persistentes
Mapeamento
• Mapeamentos object/relational são definidos num documento XML
• A linguagem para mapeamento é centrada em objectos
• Declaração de classes persistentes e não de tabelas
Mapeamento
Arquitectura
API (Parte 1)
• ISession
• ITransaction
• ISessionFactory
API / ISession
• Principal interface .NET/NHibernate
• Representa uma conversação entre a aplicação e a base de dados
• Disponibiliza métodos para executar operações de CRUD
API / ISession
• Implementação implícita do patternUnit of Work
• Alterações às entidades persistem nos limites de uma transacção
• Factory para instâncias da interface ITransaction
API / ITransaction
• Permite que as aplicações definam operações atómicas (transacções)
• Uma transacção está associada a uma sessão
• Uma sessão poderá iniciar várias transacções
API / ISessionFactory
• Factory para instâncias da interface ISession
• Comportamento é controlado por propriedades de configuração
• Tipicamente, uma aplicação tem uma única ISessionFactory
Operações de CRUD
API (Parte 2)
• ICriteria
• ICriterion
• Restrictions
• IProjection
• Order
API / ICriteria
• Representa uma query sobre uma classe persistente
• Permite obter entidades compondo objectos do tipo ICriterion
• A interface ISession é uma factorypara instâncias de ICriteria
API / Restrictions
• Disponibiliza métodos factory para obter instâncias ICriterion
• ICriterion representa uma condição numa cláusula WHERE (SQL)
• São classes utilizadas para aplicar restrições na construção de queries
Queries
NHibernate: Vantagens
• Facilita a implementação do patternDomain Model
• Independência da base de dados
• Redução de código e abstracção da semântica SQL
• Query language orientada a objectos
NHibernate: Vantagens
• Navegação transparente entre objectos relacionados
• Lazy loading (configurável)
• Cache das entidades (objectos) em memória
• Gestão de transacções e isolamento
NHibernate: Desvantagens
• Menor performance se comparado com ADO.NET
• Mapeamento de chaves primárias compostas não é simples
• Produtividade depende da utilização de geradores de código
CodeSmith
• Gerador de código baseado em templates (configuráveis)
• CodeSmith IDE, CodeSmith API e integração com o Visual Studio
• Inclui templates para o NHibernate, entre outros
Alternativas O/RM
• Entity Framework
• EntitySpaces
• Genome
• LINQ to SQL
• LLBLGen Pro
Dúvidas?
Referências
http://nhforge.org
http://www.hibernate.org
http://www.ayende.com
Patrocinador desta reunião