Hibernate Ders 01 – Giris ve Kurulum

Merhabalar , daha once fesoft.org da yazmis oldugum Hibernate derslerini de buraya aktariyorum. Hibernate derslerini guncelleyecegim, ilerleyen vakitlerde Spring Framework ile birlikte bir ornek uygulama yapacagim.

Hibernate bir nesne/iliskisel (Object/Relational Mapping) aracidir.
ORM(Object/ Relational Mapping), object oriented dillerdeki nesnelerin, iliskisel veritabanindaki (Relational Database) kayitlara nasil karsilik geldiğini yürüten bir teknolojidir.

Hibernate yalnizca Java siniflarindan veritabani tablolarina veya Java veri tiplerinde SQL veri tiplerine donusumu yapmaz. Hibernate veri sorgulama ve veri cekme islemlerini de kullanici icin saglar.
Bu ozellikleriyle Hibernate gelistirme kolayligi ve zamandan kazanc saglar.

Hibernate guclu bir query dili destegiyle(Hibernate Query Language ) nesneleri veri tabanindan cekmeyi ve sekilde onbellege alma (caching) islerini de etkili bir sekilde gerceklestirmektedir.

Yazilarimda cok fazla detaya girmeden, ornekler üzerinden anlatmaya calisacagim.
Ornekleri yaparken, Netbeans IDE ve veritabani olarak postgreSQL kullanacagim.(Bir başka veritabanida kullanabilirsiniz, ornegin mysql, sadece kucuk bir iki hareketle işlem tamamlanabilir, yeri geldiğinde bahsetmeye calisacagim)
Hibernate ile ilgilendiğinize gore temel Java gibi konularda bilginiz olduğunu varsayiyorum 🙂

Hemen ornek ile baslayalim , yeni bir proje acalim !

Netbeanste , File -> New Project-> Java-> Java Application yani basitçe bir  java projesi aciyoruz

hibernate kurulum 1
Projemize Hibernate JPA kütüphanesini ekleyelim. Bu işlemde son derece basit ! Library’e sag tiklayip Add Library dedikten sonra Hibernate JPA seçiyoruz ve add diyoruz.Eger bu kütüphaneyi yoksa Tool- >plugins sekmesinden hibernate ‘i aratip gerekli kutuphaneleri yükleyin.

hibernate kurulum 02

hibernate kurulum 3

Sira geldi postgreSQL in jar dosyasini eklemeye. Libraries e sag tiklayip add JAR/files diyoruz. PostgreSQL i yüklediğimiz dizine geliyoruz ve jar dosyasini bulup projemize ekliyoruz, ben de C:\Program Files\PostgreSQL dizininde.

hibernate 4

Sirada postgreSQL de veritabani oluşturmak var, pgAdmin3.exe ile programi calistirdiktan sonra resimde goruldugu gibi New Database diyoruz.

hibernate kurulum 5

Name alanina veritabanimizin adini veriyoruz,burada tutorial ismini kullanalim, owner kismina “postgres” yazıyoruz.OK diyoruz !

hibernate kurulum 6

Artik Hibernate ile ilgili ornek yapmaya haziriz 🙂
Tekrar Netbeans uzerinde calismaya devam edelim, projemizde yeni bir  package aciyoruz, ben hibernateExample_1 olarak isimlendirdim, ve Employee isimli bir sinif olusturuyoruz.

private int empId;
private String empName;
private String empSurname;

olmak uzere 3 adet degisken ekliyoruz kodumuza.Sayisi önemli değil =) Ama mutlaka id olacak bir değişken gerekmekte !
Ve bu değişkenlerin getter/setter larini olusturacagiz.

Sinifimiz POJO yapisinda olacak.Tum nitelikleri private olan belirleyi niteliği serialized olan niteliklerine ulaşmak için get/set methorlari tanimlayan sinifa POJO( Plain Old Java Object) denir.

Degiskenleri yazdıktan sonra Netbeanste sag tiklayip insert code dedikten sonra getter setter seçeneğini seçip , tum değişkenleri onaylayıp generate diyoruz ve netbeans bizim için getter/setter metotlari oluşturuyor 🙂

hibernate kurulum 7

Sira geldi Entity annotation’i yazmaya,Sinifimizin basina, @Entity yazip, import javax.persistence.Entity; ‘i import edelim. Bu sayede veritabanina bu sinifin bir persistence nesne olduğunu soylemis oluyoruz.

@Entity
public class Employee{}

@Id annotation ‘i da asagidaki gibi yazıyoruz ve import javax.persistence.Id;  ekliyoruz.

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

Birden fazla kayit eklediğimizde eger Id uretimi icin bir strateji belirlemezsek.
“Exception in thread “main” org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:”
tarzında bir hata verecektir.
Biz de @GeneratedValue diyip, bir strateji belirliyoruz

Burada basitce AUTO seçiyorum, bazi veritabanlarinda değişiklik gösterebiliyor farkli stratejiler. Simdilik bu yapi basit olarak isimizi görecektir.

Sira geldi konfigürasyon dosyasi oluşturmaya…
Projemizin altinda bulunan Source Packages ‘ a sag tiklayip New diyip Other diyoruz. Solda Hibernate i seçiyoruz ve sağdaki alandan Hibernate Configuration Wizard i seçiyoruz.

Sag tarafta bulunan Hibernate Mapping Wizard gibi dosyalar farkli yaklasimlarda kullanılabiliyor. Ilerleyen zamanlarda bunun nasil kullanildigina dair ornek yapmaya calisirim.

Not: Eger Hibernate klasörü yoksa, Java EEyi kapsayan bir Netbeans Paketi yüklemenizi öneririm.

hibernate kurulum 8

Next diyoruz, karsimiza isim verme ekrani geliyor, orada değiştirme yapmadan tekrar next diyoruz.

hibernate kurulum 9

Burada daha once postgresql’ i netbeans ile entegre etmediğimiz için New Database Connection diyoruz ve Finish e basıyoruz.

hibernate kurulum 10

Burada ben de daha once  PostgreSQL eklendigi için listede goruyorsunuz.

hibernate kurulum 11

New Driver diyip postgreSQL in jar dosyasini dizinde buluyoruz.
Daha sonrasinda isim veriyoruz burada yeniPostgreSQL dedim ve OK diyorum.

hibernate kurulum 12

Her sey yolundaysa asagidaki gibi bir ekran gelecek.Burada Next diyoruz.

hibernate kurulum 13

Asagidaki resim gibi dolduruyoruz. Localhost, portumuz 5432 (eger değiştirmediyseniz) database ismimiz tutorial di, user name postgres, password da koydugumuz sifre neyse o 🙂 test connection dediğimizde Connection Succeeded i goruyorsak olay tamamdir.

hibernate kurulum 14

Next diyip default schema yi seçebilirsiniz, cok önemli değil , next diyip public i seçiyorum.Asagidakine benzer bir ekran geliyor finish diyip olayi bitiriyoruz.

hibernate kurulum 15

Default package altinda hibernate.cfg.xml dosyamiz sorunsuzca oluştu  J
hibernate.cfg dosyamizi acip

    <property name="hibernate.hbm2ddl.auto">create</property>
    <property name="current_session_context_class">thread</property>

Kodlarini ekliyoruz. Burada tabloyu create etmemizi, sagliyor, ya da update diyebilirsiniz, tablo oluştuktan sonra arasindaki farki ornegi calistirip tablo sonuçlarına bakarak görebilirsiniz.

“Exception in thread “main” org.hibernate.HibernateException: No CurrentSessionContext configured! ”
seklinde bir hata almamak icin current_session_context_class i ekliyoruz 🙂

hibernateExample_1 package in altina TestEmployee isimli yeni bir sinif oluşturuyoruz. Ve içine bir zahmet public static void main(String[] args)  ekliyoruz  🙂

main metodumuzun icinde ;

     AnnotationConfiguration config = new AnnotationConfiguration();
     config.addAnnotatedClass(Employee.class);
     config.configure("hibernate.cfg.xml");

konfigürasyon yapmanin bir kac yolu var, burada kullandigimiz yöntemde, bir AnnotationConfiguratin nesnesi oluşturuyoruz. Bu örnekte 1 adet entity sinifimiz var adi da Employee idi, Employee.class  argumanini veriyoruz.
Son olarak konfigürasyon dosyamiz olan hibernate.cfg.xml in adini arguman olarak veriyoruz.

new SchemaExport(config).create(true, true);

kodu eger tablomuz yoksa, yani ilk kez ornegi calistiriyorsak bizim icin tablomuzu oluşturur.

Genel olarak Hibernate araciligiyla kayit eklemek icin basit bir kod gösterimi olarak asagidaki gibi ifade edilebilir:

    SessionFactory factory = config.buildSessionFactory();
    Session session = factory.getCurrentSession();
    session.beginTransaction();

    /* İşlemler…   */
    session.save(…);
    session.getTransaction().commit();


SessionFactory
SessionFactory,Session objelerini olusturmak ve arka planda caching, mapping gibi gorevlerden sorumludur. Kisacasi uygulamamizin yonetilmesinden sorumludur.Session Factory maliyetlidir  Bu nedenle, eger farkli veritabanlarina farkli ayarlar(settings) uzerinden baglanti saglamiyorsak , bir adet Session Factory yeterli olacaktir.

Session
Bir Session her zaman SessionFactoryden uretilir.  Session , uygulamamiz ve veritabani arasindaki islemi ifade eder. Session objesi yardimiyla veritabanina baglanti saglanir veriler eklenir, cekilir.
Session bunun yaninda bazi caching fonksiyonlari saglar , lazy loading objeleri yonetir ve objelerin durum degisikliklerini kontrol eder. (persistent object , detached object , transient object )

Transaction
Hibernate  Transaction kavrami JDBC transaction kavramina benzer.

    Employee levent = new Employee();
    levent.setEmpName("Levent");
    levent.setEmpSurname("Erguder");

Employee turunde bir nesne oluşturduk 🙂 adi da levent olsun,
ve setter metotlari yardimi ile gerekli değerleri veriyoruz.Bu sekilde dilediğimiz kadar nesne oluşturabiliriz.Bu ornegimizde ben 3 tane ornek oluşturdum.
session.save(levent);  ve nesnemizi argüman olarak veriyoruz, bunu bir cesit insert into gibi düşünebiliriz. Yani kayit eklememizi sağlayan kodumuz.

session.getTransaction().commit(); ile  işlemimizi bitiriyoruz ve session kapaniyor.
bu koddan sonra session.save() yaparsak
“Exception in thread “main” org.hibernate.SessionException: Session is closed!”

Employee.java

package hibernateExample_1;

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 Employee implements Serializable {

private int empId;
private String empName;
private String empSurname;

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

public void setEmpId(int empId) {
this.empId = empId;
}

public String getEmpName() {
return empName;
}

public void setEmpName(String empName) {
this.empName = empName;
}

public String getEmpSurname() {
return empSurname;
}

public void setEmpSurname(String empSurname) {
this.empSurname = empSurname;
}

}

TestEmployee.java

package hibernateExample_1;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

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

    public static void main(String[] args) {

        AnnotationConfiguration config = new AnnotationConfiguration();
        config.addAnnotatedClass(Employee.class);
        config.configure("hibernate.cfg.xml");

         new SchemaExport(config).create(true, true);

        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.getCurrentSession();
        session.beginTransaction();

        Employee levent = new Employee();
        levent.setEmpName("Levent");
        levent.setEmpSurname("Erguder");

        Employee recep= new Employee();
        recep.setEmpName("Recep");
        recep.setEmpSurname("Bostanci");

        Employee cagri= new Employee();
        cagri.setEmpName("Cagri");
        cagri.setEmpSurname("Cetin");

        session.save(levent);
        session.save(recep);
        session.save(cagri);
        session.getTransaction().commit();

    }
}


hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
        <property name="hibernate.dialect"> org.hibernate.dialect.PostgreSQLDialect</property> 
        <property name="hibernate.connection.driver_class"> org.postgresql.Driver</property> 
        <property name="hibernate.connection.url"> jdbc:postgresql://localhost:5432/tutorial</property> 
        <property name="hibernate.connection.username"> postgres</property> 
        <property name="hibernate.connection.password"> SIFRENIZ</property> 

        <!--Drop and re-create the database schema on startup --> 
        <property name="hibernate.hbm2ddl.auto"> create</property> 
        <property name="current_session_context_class"> thread</property> 

    </session-factory> 
</hibernate-configuration>

Ve projemizi calistirma vakti simdi !
Eger her sey yolunda gittiyse tablomuz sorunsuzca oluştu. Netbeanste Sevices ten ulaşabiliriz ! employee tablomuza sag tiklayip View Data dediğimizde kayitlari listeleyebiliriz.
hibernate19_viewDatahibernate20_data

ya da pgAdmin III  arayuzunden görebiliriz.(sevimli mavi fil kafasi iconuna tiklayin 🙂 -pgAdmin3.exe ) tablomuza (employee) sag tiklayip View Data dediğimizde kayitlari listeleyebiliriz.
hibernate21_pgAdminhibernate22_pgAdminData

Ilk yazimi burada sonlandiriyorum. Her turlu eleştiri , hata duzeltimini bekliyorum 🙂
Asagidaki linkten kaynak dosyalari indirebilirsiniz. Yeni proje acip, kutuphaneleri eklediginiz kullanima hazir , bir de hibernate.cfg.xml dosyasinda SIFRENIZ kismini sifremiz neyse onu yaziyoruz 🙂

kaynak kodlar: HibernateTutorial

Herkese Bol Javali Gunler
Be an  oracle man, import java.*;
Levent Erguder
in java we trust

Print Friendly, PDF & Email

Leave a Reply

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