Hibernate Ders 10 – Hibernate Queries – 01

Merhaba Arkadaslar,
Bir kac ders boyunca HQL (Hibernate Query Language), basit sorgular ve bir kac notasyon kullanip ornek bir uygulamaya uzeinde calisacagiz.

Bu yazimizda FROM cumlecigi(clause) uzerinden ornegimize baslayacagiz.

Once kisa kisa bilgi vermeye calisalim

Hibernate, HQL denilen (Hibernate Query Language ) bir sorgulama dili destekler.
HQL , Object-Oriented query dilidir ve adindan da anlasildigi uzere SQL e benzer.
HQL persistent object ve bu persistent object lerin alanlari ile ilgilenir.
HQL sorgulari, Hibernate araciligi ile geleneksel SQL sorgularina donusturulur ve database uzerinde islem gorur.
Bununla birlikte SQL sorgularini direkt olarak Hibernate ile kullanabiliriz. (Native SQL)
Database bagimsizligi acisindan HQL kullanilmasi onerilir 🙂

Select, from, where gibi anahtar kelimeler HQL de case-sensitive degildir.(buyuk kucuk harfe duyarli degildir) fakat tablo adi ve sutun (column) adi case-sensitive dir.

Persistent sinifimizi olusturalim.. package ismimiz hibernate10_Queries ve Workers adinda sinifimizi olusturalim.

private int worker_id;
private String name;
private String surname;
private int salary;

Alanlarimiza ait getter/setter ve constructor i olusturalim.

Workers.java

package hibernate10_Queries;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
*
* @author Levent
*/
@Entity
public class Workers implements Serializable {

private int worker_id;
private String name;
private String surname;
private int salary;

public Workers() {
}

public Workers(String name, String surname, int salary) {
this.name = name;
this.surname = surname;
this.salary = salary;
}

@Id
@GeneratedValue(strategy= GenerationType.AUTO)
public int getWorker_id() {
return worker_id;
}

public void setWorker_id(int worker_id) {
this.worker_id = worker_id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSurname() {
return surname;
}

public void setSurname(String surname) {
this.surname = surname;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

}

Simdi sirada test sinifimiz var.
Oncelikle tablomuza kayit ekleyelim. Bir onceki ornekte ekledigimiz gibi for dongusu icerisinde 10 adet kayit ekliyoruz.

Workers workers;
for (int i = 1; i <= 10; i++) {
workers = new Workers("WorkerName " + i, "WorkerSurname" + i, i * 50);
session.save(workers);
}

Veritabanina ekledigimiz kayitlari basit bir HQL sorgusu ile cekiyoruz, ve results listesinde tutuyoruz.

String hql = "FROM Workers";
Query query = session.createQuery(hql);
List results = query.list();

Burada sunu da belirtmek istiyorum From Workers dedigimiz kisimda biz HQL ile persistent object leri kullandigimiz icin

String hql = "FROM hibernate10_Queries.Workers";

diyerek de calistirabiliriz, yani paketadi+sinifimizin adi.

Listede tuttugumuz sorgu sonucumuzu cikti olarak su sekilde yazdirabiliriz.

for (Iterator it = results.iterator(); it.hasNext();) {
Workers i = (Workers) it.next();
System.out.println(i.getName()+" "+i.getSurname()+" "+i.getSalary());
}

Yukaridaki for dongusunden kisaca bahsedecek olursak, oncelikle List kavrami, Javanin en guclu alt sistemlerinden olan Collection(koleksiyon) kavrami icerisinde bulunur.

List ve Iterator Kavrami

List arabirimi Collection i genisletir ve bir dizi elemanlar sekansini depolayan bir koleksiyonu davranisini tanimlar.
Iterator kavramina deginecek olursak, koleksiyondaki elemanlarin tumune bir dongu ile erismek isteyebiliriz bunu yapmanin en kolay yolu iterator kullanmaktir.

Bir koleksiyonun icerigini bir iterator ile elde etmek icin su adimlardan yararlanilir :
1)Koleksiyonun iterator() metodunu cagirarak koleksiyonun basinda bir iterator elde ederiz. ( Iterator it = results.iterator() )
2)hasNext() i cagiran bir dongu olustururz. hasNext() true dondugu surece donguyu tekrarlariz. ( it.hasNext() )
3)Dongu icinde her elemani next() ile cagirarak elemanlari elde ederiz.

Bu dersimizin amaci koleksiyonlar olmadigi icin bu kadarlik bilgi simdilik yeterli olacaktir.
Not: koleksiyonlar onemli yapilardir mutlaka ogrenilmesi gerekmektedir 🙂

Biz ornegimize devam edelim ve gorelim bakalim tablomuza kayitlar eklendi mi.

hibernateTutorial_10_db1

Tabloya basariyla kayitlari ekledik.

hibernateTutorial_10_db2

Basariyla Netbeanste cikti olarak yazdirdik.

query.setFirstResult(5);
query.setMaxResults(2);
List resultsMax = (List) query.list();
for (Workers i : resultsMax) {
System.out.println(i.getName() + " " + i.getSurname() + " " + i.getSalary());
}

Burada setFirstResult() a index vererek, hangi numarali kayiti listemize eklemeye baslayacagimizin bilgisini verebiliriz.(burada index 0 ile baslamaktadir.)
setMaxResults() ile de alinabilecek maksimum kayit sayisini verebiliriz.

Burada Workers turunde bir Liste yaklasimi ile de kayitlar tutulabilir.(resultsMax listesinde )
query.list() in gordugunuz gibi List a donusturulmektedir ve tip uyumlulugu saglanmaktadir. Bu sayede for dongusu icerisinde iterator kullanmaya gerek kalmamaktadir.

Gordugunuz gibi 6.kayittan itibaren 2 kayit getirdik. (Result Maximum List)
ve son olarak da

System.out.println(query.getQueryString());

ile sorgu cumlecigimizi ekrana yazdirabiliriz.

WorkersTest.java

package hibernate10_Queries;

import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
*
* @author Levent
*/
public class WorkersTest {

public static void main(String[] args) {
AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(Workers.class);
config.configure("hibernate.cfg.xml");

new SchemaExport(config).create(true, true);
SessionFactory factory = config.buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();

Workers workers;
for (int i = 1; i <= 10; i++) {
workers = new Workers("WorkerName " + i, "WorkerSurname" + i, i * 50);
session.save(workers);

}

String hql = "FROM hibernate10_Queries.Workers";
Query query = session.createQuery(hql);
List results = query.list();

System.out.println("size of list result=" + results.size());
for (Iterator it = results.iterator(); it.hasNext();) {
Workers i = (Workers) it.next();
System.out.println(i.getName() + " " + i.getSurname() + " " + i.getSalary());
}

System.out.println("____Result Maximum List__");
query.setFirstResult(5);
query.setMaxResults(2);
List resultsMax = (List) query.list();

for (Workers i : resultsMax) {
System.out.println(i.getName() + " " + i.getSurname() + " " + i.getSalary());
}

System.out.println(query.getQueryString());
session.getTransaction().commit();
}
}

Dersimize burada son veriyorum.
kaynak kodlar: HibernateTutorial_v10

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *