11 Nisan 2015 Cumartesi

HQL (Hibernate Query Language)

Herkese merhabalar.

   Doğrudan SQL sorgularını kullanarak veritabanı üzerinde işlemler gerçekleştirmek istemiyorsanız; nesneler üzerinde işlem yaparak da veritabanı işlemlerinizi gerçekleştirebileceğiniz bir sorgu dili mevcut. Bugün sizlere Hibernate'in sorgu dilinden bahsetmek istiyorum. Hibernate sorgu dili, SQL'e benzer özellikleri olan nesne tabanlı bir sorgu dilidir. HQL'in SQL'den en önemli bilinmesi gereken farkı; SQL kolonlar ve tablolar üzerinde işlem yaparken, HQL objeler ve diğer özellikler üzerinde işlemlerini gerçekleştirir. HQL, Hibernate tarafından, veritabanı üzerinde doğrudan işlem gerçekleştirebilen SQL'e dönüştürülür. Şu unutulmamalıdır ki veritabanı ile en yakın olan katman her zaman SQL'dir [1]. 

   HQL yazarken büyük-küçük harf duyarlılığına dikkat edilmelidir. WHERE, SELECT, FROM gibi kelimeler de  büyük-küçük harf duyarlılığı aranmazken; tablo ve kolon isimleri gibi özellikler yazılırken büyük-küçük harf duyarlılığı mevcuttur. Şunu da eklemek istiyorum; HQL'in güzel özelliklerinden birisi de  veritabanından bağımsız yazılan bir sorgu dili olmasıdır [1].  Gelin hep birlikte HQL'de en çok kullanılan kalıplara bakalım.

from ve as 

 from obje [as nil_obje]*   
 obje_adi  
  
   Genellikle select ile kullanılır. Sorguda istenilen cevabın hangi tablodan çekileceğini belirtir. "as" ifadesi ile uzun ve kullanımı zor olan tablo veya alan adlarına geçici olarak kısa isimler vererek bunları kodlamamızda kullanabiliriz [2]. Böylece mevcut tablo yapımız bozulmadan dinamik olarak belirlediğimiz isimleri kullanabilmekteyiz.

select


Sorgunun sonuç kümesinde ne olacağını belirten sözcüktür [2].

 select ogrenciisim from bilgisayarMuhendisligi as bilgisayarogrencisi  


where


   Sorgu kümesinde dönmesi istenen durumların istenen koşullar doğrultusunda dönmesini sağlayan sözcüktür. =, >, AND, NOT  gibi operatörler kullanılır [2].

  select ogrenciisim from bilgisayarMuhendisligi as bilgisayarogrencisi where ogrenci_no > 10   

Birleşik Değerli Fonksiyonlar


   Birleşik değerli fonskiyonlar kullanılarak, yapılan sorgulama alanı daraltılarak çalışma süresi optimize edilebilir [2,3].

  • avg(): Ortalama değeri döndürür.
  • count(): İstenilen değere bağlı kayıt sayısını döndürür. Boş değer içeren kaydı saymaz.
  • count(*): İstenilen değere bağlı kayıt sayısını döndürür. Boş değer içeren kaydı sayar.
  • first(): İlk değeri döndürür.
  • last(): Son değeri döndürür.
  • max(): En büyük değeri döndürür.
  • min(): En küçük değeri döndürür.
  • sum(): Toplam değeri döndürür.


 select count(Meslek) from tblKomsular  


Insert Kullanımının SQL'den Farkı



   Bilinmesi gereken önemli noktalardan birisi; HQL'de doğrudan tabloya ekleme yapamazsınız; ancak bir tablodan diğer tabloya ekleme yapabilirsiniz [1].

Alt Sorguların Kullanımı


   Alt sorgular, sorgusu oldukları ana sorgudan önce çalıştırılırlar. Parantez içine yazılılırlar ve "where" sözcüğüyle birlikte kullanılarak istenilen sorgu yanıtının aralığını daraltmaya yardımcı olurlar [1,4].

 select bolumad from bolumler as bolum where bolumgelir> (bolumgelir avg() from bolum)  

Örnek HQL Sorgusu

 var bloglar = s.CreateQuery("from Blog b where b.Baslik = :baslik and b.Altbaslik = :altbaslik")  
   .SetParameter("baslik","Nil Busra Ozer Kisisel Blog")  
   .SetParameter("altbaslik", "Hibernate Query Language")  
   .List<Blog>();  

 
   Bugünlük anlatacaklarım bu kadar. HQL çok derin bir konu olduğu için özellikle temel kullanımlarına değinmek istedim. Bir sonraki yazımda görüşmek üzere, hoşçakalın..

Kaynaklar


[1]HibernateQueryLanguage,http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm, Nisan 8, 2015.

[2]Introducing HQL: The Object-Oriented Query Language from Hibernate, http://www.developer.com/open/article.php/3322131/Introducing-HQL-The-Object-Oriented-Query-Language-from-Hibernate.htm, Nisan 8, 2015.

[3]Using HQL (Hibernate Query Langıage), http://docs.castleproject.org/Active%20Record.Using%20HQL%20(Hibernate%20Query%20language).ashx, Nisan 9, 2015.

[4]NHibernate Queries-Examples, http://ayende.com/blog/4023/nhibernate-queries-examples, Nisan 9, 2015.



Hiç yorum yok:

Yorum Gönder