Hibernate ile kullanılan sorgulama dili Hibernate Query Language (HQL). Ayrıca Criteria Query ya da Native SQL ile sorgulama yapmak ta mümkün.
HQL ve Birincil Önbellek
HQL ile sorgulama yapılırken hibernate birinci kademe önbelleği kullanır. Klasik SQL ile sorgu yapılırken birinci kademe önbellek kullanmamaktadır. Bu durumu anlatan şekil burada.
HQL ve Sorgulama Parametreleri
HQL ile sorgulama yaparken sorgunun içine "?" veya ":parametreismi" formatında değişken alanlar vererek, dışarıdan dinamik sorgu parametreleri kullanmak mümkün.
Sorgu içindeki alanların değerleri Query sınıfının setParameter(int position,Object val) veya setParameter(String name,Object val) metodu ile kullanarak atanabilir.
1. Pozisyon Kullanımı - Positional Parameter
Parametre değeri yerine soru işareti karakteri koyarız. Daha sonra setString, setParameter gibi metodlarla değeri atarız.
setParameter için şöyle örnek
2. İsim Kullanımı - Named Parameter
Parametre değeri yerine : karakteri ile başlayan bir isim koyarız. Daha sonra setString, setParameter, setLong gibi metodlarla değeri atarız.
setParameter için örnek.
3. İsim Listesi - Named Parameter List
setParameterList metodunu kullanırız. Mesela "in clause" kullanılmak istenirse, named parameter atamak gerekiyor. Örnek Spring hibernate template list as a parameter sorusunda görülebilir.
Bir başka örnek ise aşağıda. Bu örnekte setParameterList() metoduna geçilen verinin int değil Integer olması gerektiğine dikkat etmek lazım.
Verilen nesnenin getter() metodları kullanılır. Örnekte getName() ve getAuthor metodlarının olduğu varsayılıyor.
Şöyle yaparız.
HQL ve uniqueResult
Örneği buradan aldım. Tek bir sonuç gelecekse bu uniqueResult metodu kullanılabilir.
HQL ve Birincil Önbellek
HQL ile sorgulama yapılırken hibernate birinci kademe önbelleği kullanır. Klasik SQL ile sorgu yapılırken birinci kademe önbellek kullanmamaktadır. Bu durumu anlatan şekil burada.
HQL ve Sorgulama Parametreleri
HQL ile sorgulama yaparken sorgunun içine "?" veya ":parametreismi" formatında değişken alanlar vererek, dışarıdan dinamik sorgu parametreleri kullanmak mümkün.
Sorgu içindeki alanların değerleri Query sınıfının setParameter(int position,Object val) veya setParameter(String name,Object val) metodu ile kullanarak atanabilir.
1. Pozisyon Kullanımı - Positional Parameter
Parametre değeri yerine soru işareti karakteri koyarız. Daha sonra setString, setParameter gibi metodlarla değeri atarız.
setParameter için şöyle örnek
Query query = session.createQuery("from ... where x > ?");
query.setParameter(0, value);
setString için şöyle örnekQuery hqlQuery = session.createQuery("from Orders as orders where orders.id = ?");
List results = hqlQuery.setString(0, "123-ADB-567-QTWYTFDL").list();
2. İsim Kullanımı - Named Parameter
Parametre değeri yerine : karakteri ile başlayan bir isim koyarız. Daha sonra setString, setParameter, setLong gibi metodlarla değeri atarız.
Query query = session.createQuery("from ... where x between :f1 and :f2 ");
query.setParameter("f1", fromDate );
query.setParameter("f2", toDate);
setLong için örnekQuery query = session.createQuery("from Emp as emp where emp.inc > :incentive");
List results = query.setLong("incentive", new Long(10000)).list();
3. İsim Listesi - Named Parameter List
setParameterList metodunu kullanırız. Mesela "in clause" kullanılmak istenirse, named parameter atamak gerekiyor. Örnek Spring hibernate template list as a parameter sorusunda görülebilir.
this.getHibernateTemplate()
findByNamedParam("select distinct ci.customer " +
"from CustomerInvoice ci " +
"where ci.id in (:ids) ", "ids", ids);
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery(DELETE_NEWS_BY_ID);
query.setParameterList(ID, Arrays.asList(idList));
query.executeUpdate();
session.getTransaction().commit();
Örnekte bir string listesi için arama yapılıyor.List items = new ArrayList();
items.add("book"); items.add("clock"); items.add("ink");
List results = session.createQuery("from Cart as cart where
cart.item in (:itemList)").setParameterList("itemList", items).list();
4. Java BeanVerilen nesnenin getter() metodları kullanılır. Örnekte getName() ve getAuthor metodlarının olduğu varsayılıyor.
Query hqlQuery = session.createQuery("from Books as books where book.name = :name
and book.author = :author");
List results = hqlQuery.setProperties(javaBean).list();
5. Native SQLŞöyle yaparız.
Query sqlQuery = session.createSQLQuery("Select * from Books where author = ?");
List results = sqlQuery.setString(0, "Charles Dickens").list();
HQL ve uniqueResult
Örneği buradan aldım. Tek bir sonuç gelecekse bu uniqueResult metodu kullanılabilir.
Query query = session.createQuery("from MasUser as m where m.userName = 'test' ");
MasUser masUser = (MasUser) query.uniqueResult();
Hiç yorum yok:
Yorum Gönder