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