Hibernate Ders 13 – Criteria Queries – 01
Merhaba Arkadaslar ,
Hibernate , veriyi veritabanindan verileri cekmek adina 3 tur yontem destekler.
HQL ve SQL yontemlerini, sorgularini daha onceki orneklerimizde uyguladik. Burada ucuncu bir yontem olan Criteria yonteminden bahsedip ornek uzerinde aciklamaya calisacagiz.
Yeni package imizi olusturalim , hibernate13_Criteria diyelim..
Employee1 isimli sinifimizi olusturalim
Employee1.java
package hibernate13_Criteria; 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 Employee1 implements Serializable { private int emp_id; private String emp_name; private String emp_surname; private int salary; @Id @GeneratedValue(strategy = GenerationType.AUTO) public int getEmp_id() { return emp_id; } public void setEmp_id(int emp_id) { this.emp_id = emp_id; } public String getEmp_name() { return emp_name; } public void setEmp_name(String emp_name) { this.emp_name = emp_name; } public String getEmp_surname() { return emp_surname; } public void setEmp_surname(String emp_surname) { this.emp_surname = emp_surname; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } }
Bir test sinifimizi olusturup tablomuza kayit ekleyip cesitli Criteria sorgularimiz uzerinde calismalar yapalim…
CriteriaTest.java
package hibernate13_Criteria; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.LogicalExpression; import org.hibernate.criterion.Restrictions; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * * @author Levent */ public class CriteriaTest { public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { AnnotationConfiguration config = new AnnotationConfiguration(); config.addAnnotatedClass(Employee1.class); config.configure("hibernate3.cfg.xml"); //new SchemaExport(config).create(true, true); SessionFactory factory = config.buildSessionFactory(); Session session = factory.getCurrentSession(); session.beginTransaction(); CriteriaTest example = new CriteriaTest(); String action = "populate"; if (action.equalsIgnoreCase("addRecord")) { example.addRecord(session); } else { Method method = CriteriaTest.class.getMethod(action, new Class[]{Session.class}); method.invoke(example, new Object[]{session}); } session.getTransaction().commit(); } public void addRecord(Session session) { Employee1 emp1 = new Employee1(); emp1.setEmp_name("Levent"); emp1.setEmp_surname("Erguder"); emp1.setSalary(1000); session.save(emp1); Employee1 emp2 = new Employee1(); emp2.setEmp_name("Recep"); emp2.setEmp_surname("Bostanci"); emp2.setSalary(1500); session.save(emp2); Employee1 emp3 = new Employee1(); emp3.setEmp_name("Furkan"); emp3.setEmp_surname("Ilgin"); emp3.setSalary(1750); session.save(emp3); Employee1 emp4 = new Employee1(); emp4.setEmp_name("Cagri"); emp4.setEmp_surname("Cetin"); emp4.setSalary(1250); session.save(emp4); Employee1 emp5 = new Employee1(); emp5.setEmp_name("Ozkan"); emp5.setEmp_surname("Ozbas"); emp5.setSalary(2000); session.save(emp5); } public void executeSimpleCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); List results = crit.list(); System.out.println(results.toString()); displayCriteriaList(results); } public void executeEqualsCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.eq("emp_name", "Levent")); List results = crit.list(); displayCriteriaList(results); } public void executeNotEqualsCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.ne("emp_name", "Levent")); List results = crit.list(); displayCriteriaList(results); } public void executeLikePatternCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.like("emp_name", "Le%")); List results = crit.list(); displayCriteriaList(results); } public void executeGreaterThanCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.gt("salary", 1400)); List results = crit.list(); displayCriteriaList(results); } public void executeAndCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.gt("salary", 1000)); crit.add(Restrictions.like("emp_name", "R%")); List results = crit.list(); displayCriteriaList(results); } public void executeOrCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); Criterion salary = Restrictions.gt("salary", 1600); Criterion name = Restrictions.like("emp_name", "R%"); LogicalExpression orExp = Restrictions.or(salary, name); crit.add(orExp); List results = crit.list(); displayCriteriaList(results); } public void displayCriteriaList(List list) { Iterator iter = list.iterator(); if (!iter.hasNext()) { System.out.println("No Results.."); return; } while (iter.hasNext()) { Employee1 employee1 = (Employee1) iter.next(); String msg = employee1.getEmp_name()+" "+employee1.getEmp_surname()+ "\t"+employee1.getSalary(); System.out.println(msg); } } }
Bir onceki ornegimizde yaptigimiz gibi oncelikle, kayit ekleyecegiz. addRecord metodumuzu cagirip kayitlarimizi ekleyelim.
public void addRecord(Session session) { Employee1 emp1 = new Employee1(); emp1.setEmp_name("Levent"); emp1.setEmp_surname("Erguder"); emp1.setSalary(1000); session.save(emp1); Employee1 emp2 = new Employee1(); emp2.setEmp_name("Recep"); emp2.setEmp_surname("Bostanci"); emp2.setSalary(1500); session.save(emp2); Employee1 emp3 = new Employee1(); emp3.setEmp_name("Furkan"); emp3.setEmp_surname("Ilgin"); emp3.setSalary(1750); session.save(emp3); Employee1 emp4 = new Employee1(); emp4.setEmp_name("Cagri"); emp4.setEmp_surname("Cetin"); emp4.setSalary(1250); session.save(emp4); Employee1 emp5 = new Employee1(); emp5.setEmp_name("Ozkan"); emp5.setEmp_surname("Ozbas"); emp5.setSalary(2000); session.save(emp5); }
addRecord metodumuzda 5 adet kayit ekledik.Kodumuzu calistirip, kayitlarimizin sonuclarini gorelim..
Sirada diger metotlarimizin test edilmesi var…
Session arabirimi bir cok createCriteria metodu tanimlar.
En basit olarak parametre almayan ve kisit(restriction) olmayan criteria query’miz..
public void executeSimpleCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); List results = crit.list(); System.out.println(results.toString()); displayCriteriaList(results); }
Metodumuzu calistirmak icin, bir onceki ornegimizde yaptigimiz gibi main metodumuz da yer alan action degiskenimizin degerini metodumuz adini yapiyoruz.
String action = “executeSimpleCriteria”;
Gordugumuz gibi sonuclarin hepsini getirdi. (zaten 5 kaydimiz vardi 🙂 ) Sonuclari getirken dikkat ederseniz bir metot daha cagiriyoruz..
public void displayCriteriaList(List list) { Iterator iter = list.iterator(); if (!iter.hasNext()) { System.out.println("No Results.."); return; } while (iter.hasNext()) { Employee1 employee1 = (Employee1) iter.next(); String msg = employee1.getEmp_name()+" "+employee1.getEmp_surname()+ "\t"+employee1.getSalary(); System.out.println(msg); } }
Bu metotta iterator arabirimini kullanarak listemiz de kayit olup olmadigini kontrol ediyoruz ve string degiskenimizi ekrana cikti olarak yazdiriyoruz. iterator hakkinda daha once bilgivermistik. Detayli bilgi icin java collection catisina bakilabilir.
Criteria ile querylerimizi restrictionlar ekleyebiliriz.
public void executeEqualsCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.eq("emp_name", "Levent")); List results = crit.list(); displayCriteriaList(results); }
Bu metodumuzda add ile yeni bir kisit ekliyoruz.emp_name i Levent olan kayitlari getiriyoruz. burada eq =equal anlamindadir. Bu metodu calistirip gelen kaydi gorelim.
Gordugunuz gibi emp_name i Levent olan kayidi getirdik. ( Buada 1 kaydimiz oldugu icin tek kayit geldi ).
Bir onceki metotda eq kullanmistik burada ne kullaniyoruz. Burada da emp_name i Levent olmayan kayitlari getirecek.
public void executeNotEqualsCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.ne("emp_name", "Levent")); List results = crit.list(); displayCriteriaList(results); }
Restriction.like ile SQL sorgularimizda kullandigimiz like mantigini gerceklestirebiliri.
SQL ifadelerinde kullandigimiz % isareti burada da gecerli.
public void executeLikePatternCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.like("emp_name", "Le%")); List results = crit.list(); displayCriteriaList(results); }
Bu metodumuzda da Restriction.gt ifadesinden yararlaniyoruz. Maasi 1400 den buyuk (gt => greater than ) olan kisilerin kayitlarini getiriyoruz.
public void executeGreaterThanCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.gt("salary", 1400)); List results = crit.list(); displayCriteriaList(results); }
Burada da maasi 1400ten yuksek zengin arkadaslari goruyoruz 🙂
And iliskisini de su sekilde yapabiliriz…
2 tane restriction i ekledigimizde bu durumda, hem salarysi 1000 den buyuk olan hem de emp_name i R ile baslayan kayitlari getirecek.
public void executeAndCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); crit.add(Restrictions.gt("salary", 1000)); crit.add(Restrictions.like("emp_name", "R%")); List results = crit.list(); displayCriteriaList(results); }
son olarak or sorgumuzu da yapalim…
Metotdta goruldugu gibi 2 tane Criteion nesnemizi olusturduk.Restriction.or metodumuza salary ve name Criterion nesnelerimizi veriyoruz.ve tek bir kriterimizi crit nesnemize ekliyoruz.
Sonuc olarak maasi 1600den buyuk olan kisilerin kayitlari veya Ismi R ile baslayan kisilerin kayitlarini getirecek.
public void executeOrCriteria(Session session) { Criteria crit = session.createCriteria(Employee1.class); Criterion salary = Restrictions.gt("salary", 1600); Criterion name = Restrictions.like("emp_name", "R%"); LogicalExpression orExp = Restrictions.or(salary, name); crit.add(orExp); List results = crit.list(); displayCriteriaList(results); }
Gordugunuz gibi kayitlarimiz basariyla geldiler.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply