« Voltar
em nhibernate orm query banco de dados

Como fazer queries no NHibernate: Criteria, QueryOver, LINQ to NHibernate, HQL e SQL.

Hoje quando se fala de ORM no mundo .NET temos dois nomes fortes: Entity Framework e NHibernate.

O Entity Framework a maioria conhece: é o ORM oficial da Microsoft e integra muito bem com o .NET.
Pode ser que do NHibernate você talvez não tenha ouvido falar. Ou ouviu falar mas nunca utilizou. Ou talvez você use o NHibernate e às vezes quer fazer uma query um pouco diferente mas fique um pouco na dúvida de como montar. Enfim, se você se encaixa em algum dos casos, este post é pra você(ou se você só for alguém que quer aprender mais também (: ).

O NHibernate é um framework irmão do Hibernate que é do mundo Java. O Hibernate é um dos ORMs mais populares e maduros pra quem desenvolve em Java. Seu irmãozinho do .NET não puxou a popularidade, mas com relação à maturidade ele não fica atrás não.

Mostrarei 5 formas de fazer queries com o framework. Para os 5, assumirei que quero fazer algo simples: ir em uma tabela de usuários e buscar todos os usuários com nome Gabriel (:
A ideia não é se aprofundar mas mostrar a flexibilidade do NHibernate para fazer queries.

LINQ to NHibernate

var usuarios = session.Query<Usuario>()  
              .Where(p => p.Nome == "Gabriel")
              .ToList();

Criteria

var usuarios = session.CreateCriteria<Usuario>()  
            .Add(Restrictions.Eq("Nome", "Gabriel"))
            .List<Usuario>();

QueryOver

var usuarios = session.QueryOver<Usuario>()  
            .Where(p => p.Nome == "Gabriel")
            .List();

Bem parecido com o LINQ to NHibernate né? Porém esse cara aqui é mais flexível. Dá pra fazer muito mais coisa com ele.

HQL

string hql = "select p from Usuario u where u.Nome == Gabriel";  
IQuery query =  session.CreateQuery(hql);  
var usuarios = session.List<Post>();  

Lembre-se: quando estamo escrevendo queries HQL, estamos pensando nas classes e não nas tabelas do banco de dados.

SQL

var sql = "SELECT * FROM Usuario WHERE Nome = 'Gabriel' ";  
var usuarios = session.CreateQuery(sql).List<Usuario>();  

Se não tiver jeito mesmo de fazer uma query de outras formas, você ainda pode escrever o SQL mesmo (:


E ai, gostou? Quer saber mais sobre alguma das maneiras?
Comenta aí!

Já que você leu até aqui, curte minha página lá no Facebook pra ficar em dia com as minhas postagens e outras novidades legais! O endereço é https://www.facebook.com/devgabsferreira

comments powered by Disqus