
İlişkisel veritabanı modellemesi günümüz teknolojisinin bize sunduğu önemli araçların başında gelmektedir. Projelerde veritabanı yonetimini, veri bütünlüğünü vs. daha iyi sağlamamızı kolaylaştırır. Nesneye dayalı programlama yontemi dediğimizde, ilişkisel veritabanı modellemesi ön plana daha iyi çıkar. Hibernate bu alanda bize, java nesnelerimiz ile veritabanı tablolarımız arasında bir bağ kurararak programcının işlerini büyük ölcüde kolaylaştırır. Bir örnek üzerinde hibernate’i nasıl kullanacağımızı görelim. Ben örnekleri netbeans kullanarak yapacağım.
Öncelikle hibernate.org dan core hibernate kütüphenesini indirip projenize dahil edebilir ya da daha kolay olması açısından netbeans plugin yönetiminden “Hibernate 3.2.5 Liblary” ve “Hibernate Support” pluginlerini kurabilirsiniz.
İlk Olarak Netbeans’de yeni bir proje oluşturalım.

Oluşturduğumuz projemize hibernate core ve mysql jdbc driverını ekliyelim.

Şimdi Kütüphanelerimizi ekledikten sonra projemizde kullanacağımız sınfları oluşturarlim. Ben basit bir fihrist programı düşündüm.Kişinin; Adını, Soyadını, Ev Telefonu, Cep Telefonu, Mail ve Adres bilgilerini tutan bir program yazalım.
Hibernate’te kalıcı nesnelerimizi (database kaydedilecek olan nesneler) pojo dediğimiz en basit java sınıfı olarak oluşturuyoruz. Sınıfdaki değişkenlerimizin getter ve setter fonksiyonları muklaka olmalıdır çünkü hibernate veritabanına yazarken ya da nesneyi veritabanından doldururken bu fonksiyonları kullanır.
Kişi ve Adres sınıflarımızı oluşturarak başlayalım.
Not :Netbeansde nesne değişkenlerinizi yazdıktan sonra , editöre sağ tıklayıp -> Insert Code -> Getter and Setter Seçeneğini seçerek kolaycana getter ve setter fonksiyonlarını oluşturabilirsiniz.

Adres.java :
|
/* package com.vizyon.demo.entity; /** public void setId(Integer id) { public void setAdres1(String adres1) { public String getAdres2() { public void setAdres2(String adres2) { public String getZipCode() { public void setZipCode(String zipCode) { public Kisi getKisi() { public void setKisi(Kisi kisi) { |
Kisi.java :
|
/* package com.vizyon.demo.entity; import java.util.HashSet; /** public void setId(Integer id) { public void setAdi(String adi) { public String getCepTelefonu() { public void setCepTelefonu(String cepTelefonu) { public String getEvTelefonu() { public void setEvTelefonu(String evTelefonu) { public String getMail() { public void setMail(String mail) { public String getSoyadi() { public void setSoyadi(String soyadi) { public Set<Adres> getAdresler() { public void setAdresler(Set<Adres> adresler) { |
Sınıflarımızıda oluşturduktan sonra sıra geldi hibernate ayarlarımızı yapmaya. Hibernate ayarlarımızı “hibernate.cfg.xml” adlı bir dosyada tanımlıyoruz. Bu dosyada database bağlantı ayarları, database tableları ile ilişkilendirdiğimiz nesnelerimizin map dosyalarını vs. hepsini burada tanımlıyoruz. Ben Mysql kullanacağım için ayarlarımı mysql’e göre yapıyorum.
Not : Bu dosyamızın projemizin ana souce package altında yer alması gerekli.
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.MySQLDialect</property> <property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property> <property name=”hibernate.connection.url”>jdbc:mysql://localhost:3306/demo</property> <property name=”hibernate.connection.username”>root</property> <property name=”hibernate.connection.password”>12345</property> </session-factory> </hibernate-configuration> |
hibernate.dialect = Hibernate’in hangi veritabanına göre sql cümlesi üreteceğini söylüyoruz.
hibernate.connection.driver_class = jdbc driverın adresini belirtiyoruz
hibernate.connection.url = veri tabanı yolu
hibernate.connection.username = veritabanı kullanıcı adı
hibernate.connection.password = veritabanı kullanıcı şifresi
Bu ayarlarımızdan sonra proje ağacımızın yapısı şu şekilde olmalı.

Sıra sınıflarımızın map dosyarını hazırlamya geldi. Map dosyaları sınıflarımız ve veritabanı tablomuz arasında kalan dosyalarımızdır. hibernate bu dosyadaki ayarlara bakarak hareket eder.
Örnek dosya adı : SınıfAdi.hbm.xml
Not : Bu map dosyaları, sınıfılarımızın bulunduğu source package altında olmalı (Şart değil)
Adres.hbm.xml :
|
<?xml version=”1.0″ encoding=”UTF-8″?> <hibernate-mapping>
|
Kisi.hbm.xml :
|
<?xml version=”1.0″ encoding=”UTF-8″?> <hibernate-mapping> </class>
|
Şimdi bu dosyalarımızda kullandığımız parametreleri bir inceleyelim.
Class tagı içerisinde kullandığımız name sınıfımızın adresini temsil etmektedir. Tam paket adı ile birlikte sınıfıımızın adını yazıyoruz. Bu sınıfımıza karşılık gelen tablo adını ise table kısmına giriyoruz. generator tagında ise alanımızın artan sayı şeklinde olduğunu belirtiyoruz.
Property tagı içinde ise sınıf değişkenlerimiz ile tablo alanlarını eşleştiriyoruz. Bu değişkenlerin tablo alanında nasıl olacağını belirtiyoruz.
Örneğin <property name=”adi” type=”string” column=”adi” length=”25″ /> tagının mysql deki karşılıği adi VARCHAR(25) dir.
Map dosyarındaki id kısmı önemlidir. Çünkü hibernate tablolarımızda ve sınıflarımızda primary key alanının olmasını zorunlu tutar. id tagında primary key alanımızın nasıl olması gerektiğini tanımlıyoruz.
Kisi ve Adres tablolarını bir birlerini iliskilendirmek için hibernate’te one-to-one, one-to-many, many-to-one, many-to-many tagları kullanılır. Bizim örneğimizde Kisi sınıfının Adresleri olduğu için kişiye göre adres ile one-to-many yani bire çok ilişkisi kuruyoruz. Bir kişinin bir den fazla adresi olabilir mantığı ile bu yola çıkıyoruz.
Bunun için kisi.hbm.xml dosyasında adresleri temsilen set tagını, adres.hbm.xml de ise many-to-one tagını kullanıyoruz.
Map dosyalarımızı oluşturduktan sonra bu dosyalrın yerini hibernate.cfg.xml dosyamıza ekliyoruz.
| <mapping resource=”com/vizyon/demo/entity/Adres.hbm.xml”/> <mapping resource=”com/vizyon/demo/entity/Kisi.hbm.xml”/> |
Hibernate.cfg.xml Dosyamızın değişiklikten sonraki görüntüsü :
| <?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.MySQLDialect</property> <property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property> <property name=”hibernate.connection.url”>jdbc:mysql://localhost:3306/demo</property> <property name=”hibernate.connection.username”>root</property> <property name=”hibernate.connection.password”>12345</property> <mapping resource=”com/vizyon/demo/entity/Adres.hbm.xml”/> <mapping resource=”com/vizyon/demo/entity/Kisi.hbm.xml”/> </session-factory> </hibernate-configuration> |
Bütün bu ayarlarımızı yaptıktan sonra programızıda hibernate oturumu açmamızı kolaylaştırcak HibernateUtil isimli bir static sınıf oluşturuyoruz. Bu sınıf ben örneğimde com.vizyon.demo.util içine koyuyorum.
HibernateUtil.java :
|
/* package com.vizyon.demo.util; import org.hibernate.SessionFactory; /** public static SessionFactory getSessionFactory() { |
HibernateUtil çağırdığımızda, hibernate.cfg.xml dosyasına bakarak gerekli oturumu açar ve bize bir hibernate Session sınıgı döndürür. Bu sınıf ile sorgulama yapabilir, nesnelerimizi database kayıt edebilir, silebilir ve güncelleyebiliriz.
Tüm bu ana kadarki projemizin ağaç görüntüsü şu şekilde olmalı :

Şu ana kadar yaptımız tüm kısım programımızla ilgiydi. Şimdi gerekli tablolarımızı database de oluşturalım. Bunun iki yolu var. Ya elle tablolarımızı oluştururuz ya da hibernate.cfg.xml de ufak bir eklenti ile tablolarımızın otomatik oluşmasını sağlarız. Sanırım 2. yöntem de size daha cazip gelmiştir. Bunun için hibernate.cfg.xml dosyamıza aşağıdaki tagı ekliyoruz.
| <property name=”hbm2ddl.auto”>update</property> |
Bu tag ekledimizde, hibernate ile ilk session açtılırken veritabanına bakar tablolarımız varmı, eğer yoksa tablolarımızı oluşturur. Bir diğer yanı ise kalıcı sınıflarımıza yeni degiskenler ekledik. Bu degiskenleri de otomatik olarak ilk session açarken veritabanına gider oluşturur. Bu işlemde veritabanında yapmamız gereken tek işlem hibernate.cfg.xml de belirtimiz veritabanı adının mysql de olması.
Ben mysql de “demo” diye bir veritabanı oluşturdum ve şuan içinde herhangi bir tablo yok.

Programımızn Main sınıfında hibernate ile session açalım.
Main.java
|
/* package com.vizyon.demo; import com.vizyon.demo.util.HibernateUtil; /** /** } |
Programımı F6 ile çalıştırdığımızda demo veritabanımızda herhangi bir tablo olmadığı için hibernate otomaik olarak tablolarımızı oluşturacak

Ve tablo yapılarımız tamda hbm.xml dosyalarımızda belirtiğimiz gibi
Adres tablosunda da foregin key başarıyla oluşturuyor.

Kişi Tablosu :

Şimdilik bu kadar arkadaşlar. Daha iyi ayrıntı için hibernate referans dökümanına bakabilirsiniz. Bir sonraki yazımda kaydetme, silme, güncelleme ve sorgulama işlemlerine bakarız. Sonra da tüm bu xml dosyaları ile uğraşmak yerine bu işleri annotationlar ile yapmanın nasıl olduğuna bakarız.
Annotationlar gerçekten bu işi çok kolaylaştırıyor ve zevkli hale getiriyor
Kamil ÖRS
Not: Yapmış olduğum Türkçe imla hataları ve anlatım bozuklukları için özür dilerim.
hibernate örnekleri, hibernate örnek, hibernate giriş, kamil örs, bir evin gelir gider tablosu boş, hibernate many to one örnek, hibernate giriş ceviz, fihrist programı, hibernate many to one, netbeansde method yazmak
Benzer Konular:
Çok güzel ve gerekli bir makale olmuş.
Tebrik eder, çalışmalarınızın devamını dilerim.
Java ile az biraz uğraşan herkesin anlayabileceği kadar (ki ben şu an bu gruba giriyorum), basit ve anlaşılır bir yazı olmuş. Umarım devamı gelir.
Abim senin monitör kaç inç ya o nasıl ekran görüntüsü öyle.
Makale icin teşekkürler
tamam da kardeşim benim monitör 24 inch diye bağıracağına sayfayı azcık küçültsen de bizde ağız tadıyla okusaydık şimdi makaleyi ne olurdu?
Al işte direk sayfa sonuna gelip yorum bırakıyorum makalen de senin olsun… peh…
görmemişin monitörü olmuş çekmiş çözünürlüğünü koparmış :p
en üstkeki tam ekran netbeans görüntüsü haricinde diğerleri normal.
okuyup okumamak sizin bileceğiniz iş. Zamanım kısıtlı olduğu için birde ekran görüntüleri ile uğraşmadım.
Başlangıç olarak güzel bir makale olmuş, tebrikler ve teşekkürler.
Bir çok kişi yazılanların ne olduğunu anladığını sanmıyorum sadece bende anlıyorum diye çevresini kandırmaya çalışmaktadır ancak kendini kandırıyordur neyse makale hibernate konusunda bir çok insan için işe yaracak çok güzel bilgiler içermekte emeğiniz için teşekkürler !
Allah sabır versin. ıyilik yap denize at. Yazı çok harika. Devamı gelir inşallah …
makale gerçekten çok yararlı olmuş yalnız bende Main.java da session için null pointer exception verdi(gerçi başlangıçta initialize edilmiş ama?)
çok iyi anlatılmış teşekkürler
Merhaba, yazınız çok güzel, elinize sağlık.
Bu kadar işlem yaptıktan sonra main fonksyonu içinde bu session nasıl yönetmeliyiz, açık bıraksak bir sorun olurmu vb konularada girebilirmisiniz?
Güzel bir yazı olmuş, ellerine sağlık. Sabahtan beri ıngilizce – Türkçe birçok siteye baktım, en sonunda seni buldum.
Teşekkürler
Sinan – GYTE Bilgisayar Mühendisliği
Makale tadında olmuş teşekkürler
ekran görüntüsünden yakınan arkadaşlar CTRL+ ile boyutu artırırlarsa sorun kalmaz
bence güzel bir paylaşım.
ekran görüntüsünden yakınan arkadaşlar siz daha iyisii yapında onu okuyalım. bunları yapan arkadaşların hevesini kırmak iyi bişey deil.
BıLGı PAYLAşTIKÇA ÇOğALIR. PAYLAşMAK GÜZELDıR mantığıyla
Ne zamandır hibernate öğreneyim diyordum.Sayenizde hibernate e çok güzel bir giriş yapmış oldum.Teşekkürler.Anlatım süper…
ben hibernate i eclipse te kullanmak istiyorum. eclipse plug-in yükledim.ama şimdi nasıl devam edicem bilmiyorum yardım ederseniz sevinirim
Merhabalar.Hıbernate ögrenmeye yeni başlayan biri olarak örnek çok güzel.Yaptıklarınızı bendeadım adım uyguladım ama şöyle bir hatayla karşılaştım.
“Exception in thread “main” java.lang.NullPointerException
at hibernatedeneme.Main.main(Main.java:31)
”
yrdımcı olursanız sevinirim