Hibernate’e Giriş (Veritabanına Bağlanmak ve Sınıfları Haritalamak)

Hibernate serimizin ilk dersinde kurulumları nasıl yapacağımıza,hibernate ayarlarını mysql için düzenlemeyi hibernate config ayarlarını nasıl yapabileceğimizi ve bir sınıfımızı veritabanı üzerinde nasıl haritalama yabileceğimizi yani tablo haline nasıl getirebileceğimize bakalım.

İlk olarak hibernate indirmek için bu adresten en stabil sürümünü indirmenizi öneririm, bu yazıyı yazdığımda en kararlı 4.3.10 sürümüydü. http://hibernate.org/orm/downloads/

Mysql kullanacağız dedik ve mysql bağlantımız için bir mysql sunucusuna bir veritabanı yönetim sistemine ve java ile bağlantı sağlayabilmek için jdbc kütüphaneleri kullanacağız.

Mysql server:http://dev.mysql.com/downloads/mysql/ eğer sunucu üzerinde bir mysql server varsa ve onu kullanacaksanız bilgisayarınıza tekrardan mysql server kurmaya gerek yok.Sunucu üzerinde bir veritabanı oluşturarak ip üzerinden bağlantı sağlayabilirsiniz.

Mysql Workbench:http://dev.mysql.com/downloads/workbench/ veritabanlarımızı yönetmek için kullanacağımız veritabanı yönetim yazılımı.Eğer bir linux dağıtımı kullanıyorsanız paket yöneticinizden direk olarak indirebilirsiniz,aksi taktirde bazı kütüphane sorunları çıkartabilir.

Mysql JDBC:http://dev.mysql.com/downloads/connector/j/3.1.html java ile mysql veritabanımıza bağlanabilmek için jdbc kütüphanelerine ihtiyaç duyacağız.

Gerekli dosyaları indirdiyseniz şimdi kurulumlara geçelim.İlk olarak mysql server kurulumunu yapınız,daha sonra mysqlworkbench kurulumunu yapınız.Kurulumlar tamamlandığında mysqlworkbench yazılımını açarak bir veritabanı oluşturun.Kullanıcı bilgilerinizi not alın hibernate ayarlarını yaparken lazım olacaklar.

Proje geliştirmek için ben eclipse tercih ediyorum ve projeleri eclipse üzerinde geliştireceğim.Şimdi yeni bir proje oluşturalım projemize 2 adet paket ekleyeceğim ardından ise 2 adet sınıf.Sınıf isimlerini ve paketler aşağıdaki gibidir.

proje_dosyalari

 

Şimdi hibernate ve jdbc kütüphanelerimizi projemize eklememiz gerekiyor.İndirdiğiniz hibernate sıkıştırılmış dosyasını çıkarttığınızda lib klasörü göreceksiniz bu klasör projemizde kullanacağımız jar dosylarını barındırmaktadır.Proda gerekli olanlar required klasörü içerisindeki jar dosyalarıdır fakat diğer derslerde farklı konulara da değineceğimiz için tüm jar dosyalarını projemize eklememizde fayda var.Lib klasörü içerisinde ayrı ayrı klasörler göreceksiniz tüm onların içerisindeki jar dosyalarını ayrı bir klasöre toplayın daha sonra indirdiğiniz mysql jdbc kütüphanesinide bu klasör içerisine kopyalayın.

Şimdi bu kütüphaneleri projemize ekleyelim bunun için sırası ile,Project/Properties ve JavaBuildPath sekmesi içerisinde Libraries sekmesi altında Add External Jars diyerek klasöre kopyaladığınız tüm  jar dosyalarını seçerek ekleyin ve apply diyerek uygulayın.

jar dosyalari

 

Veritabanımızı oluşturduk,sınıflarımızı ve paketlerimizi ekledik,jar dosyalarını projemize ekledik şimdi ise hibernate için ayarları yapmamız gerekiyor.Fakat ayarlara geçmeden önce sınıflarımızı yazalım ve veritabanına haritalayacağımız sınıfımızı yazalım.

Bir personel sınıfı yazacağız ve bu sınıf bizim veri tabanımıza bir tablo olarak eklenecek.

personel.java

package com.mesutpiskin.hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity //bu sınıfın veritabanı üzerinde haritalanması için işaretleme niteliğindeki anahtar kelime
public class personel {
	
int personelId;
String personelAdi,personelSoyadi;

/*her tablonun bir id si olur ve @id ile personelId değişkenimizin birincil anahtar olacak
*kolun olmasını istiyoruz ve @id anahtar kelimesi ile bunu belirtiyoruz.
*Bunu get metoduna yazıyoruz aksi taktirde haritalama sırasında sorun olacaktır.
*/
@Id
public int getPersonelId() {
	return personelId;
}
public void setPersonelId(int personelId) {
	this.personelId = personelId;
}
public String getPersonelAdi() {
	return personelAdi;
}
public void setPersonelAdi(String personelAdi) {
	this.personelAdi = personelAdi;
}
public String getPersonelSoyadi() {
	return personelSoyadi;
}
public void setPersonelSoyadi(String personelSoyadi) {
	this.personelSoyadi = personelSoyadi;
}

}

main.java

Bu sınıf ile personel sınıfımızdan bir instance oluşturacağız ve veritabanı üzerine bu verilerin eklenmesini sağlayacağız.

package com.mesutpiskin.project;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.mesutpiskin.hibernate.personel;

public class main {

	public static void main(String[] args) {
		
		//Personel sınıfımızdan bir instance oluşturuyoruz
		personel personel =new personel();
		personel.setPersonelId(1);
		personel.setPersonelAdi("MESUT");
		personel.setPersonelSoyadi("PISKIN");
		//------------------------------------
	
		//Bir oturum başlatacağız oturumdan önce ise hibernate config dosyamızı belirteceğiz
		SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
		Session session=sessionFactory.openSession();
		/*Transactionlar ile bir işlem yarıda kaldıysa  veya 
		 * tam olarak tamamlanadıysa tüm adımlar başa alınır
		 * veri ve işlem güvenliği için önemlidir.Kısacası ya hep 
		 * ya hiç prensibine göre çalışır.
		*/
		System.out.println("Transaction başlatıldı.");
		session.beginTransaction();
		//personel sınıfından aldığımız instance kaydedilmesi için gönderildi
		session.save(personel);	
		session.getTransaction().commit();
		System.out.println("Transaction tamamlandı.");
		System.out.println("Veri kaydedildi.");
		
		
	}

}

Şimdi ise hibernate için bir ayar dosyası oluşturmamız gerekiyor,hibernate veritabanımızı bulabilmek için bazı ayarlara ihtiyaç duyar,bu ayarlar ise hibernate.cfg.xml dosyasında tutulur,bu dosyada projemiz içerisinde src dizini altında olmalıdır,farklı bir yerde olduğunda ise bu belirtilmelidir.Şimdi src dizini altında bir xml dosyası oluşturalım ve ismine ise hibernate.cfg.xml diyelim.Dosyamızın içeriği ise aşağıdaki gibi olacaktır.

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Veritabanı baglanti bilgileri -->
        <!-- Veritabanı jdbc -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--Veritabanımız için bağlantı yolunu vereceğiz  -->
        <property name="connection.url">jdbc:mysql://localhost:3306/veritabaniadi</property>
         <!-- Veritabanı kullanıcı adı -->
        <property name="connection.username">root</property>
         <!-- Kullanıcı parolamız -->
        <property name="connection.password">root</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Konsolda yapılan işlemlerin sql sorgusu gösterilsin mi -->
        <property name="show_sql">true</property>

        <!-- Burası create olursa tablo her defasında yeniden oluşturulur -->
        <!-- Update olur ise veritabanı silinmez üzerine ekleme yapılır -->
        <property name="hbm2ddl.auto">create</property>
		
		 <!-- Burası ise veritabanımıza haritalanacak olan personel sınıfımızın yolu -->
        <mapping class="com.mesutpiskin.hibernate.personel"/>

    </session-factory>

</hibernate-configuration>

Son adım olarak main sınıfımızı çalıştırıyoruz ve sınıfımız veritabanı üzerinde tablo halinde yer aldığını görüyoruz.

database