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
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ı
select count(Meslek) from tblKomsular
Bilinmesi gereken önemli noktalardan birisi; HQL'de doğrudan tabloya ekleme yapamazsınız; ancak bir tablodan diğer tabloya ekleme yapabilirsiniz [1].
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..
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