Merhabalar;
Bugunkü konumuz başlıktan da anlaşılacağı üzere bir hibernate projesi yapmak. Eğer java ile web projesi geliştiriyorsanız mutlaka yolunuz hibernate'e düşmüştür. Eğer düşmemişse bile düşmesi yakındır.
Genelde, web uygulaması geliştiriken Hibernate jar paketlerini web uygulamasının lib dizininde kopyalar ve web.xml'de tanıtırlar. Ama bizim bugun yapacağımız örnekte, hibernate kütüphaneleri ayrı bir pakette bulunacak ve web uygulamasına entegrasyonu "JEE Module Dependency" ile yapılacak. Dolayısı ile data katmanı ile presentasyon katmanını projeler basında ayırmış oluyoruz. Bu durum data katmanınızın taşınabilmesine olanak sağlar.
Şimdi isterseniz başlayalım.
İlk yapmamız gereken eclipse ve java sdk'yı sistemimize kurmak. Eğer kurmadı iseniz buradan nasıl kurulacağını öğrenebilirsiniz. Eğer hazırda kurulu ve ayarlı bir eclipse'iniz varsa hibernate projesini yaratmaya başlayabiliriz.
Eclipse'inizin File menüsünden new->project... sekmesine tıklayınız. Aşağıdaki gibi bir ekranla karşılaşmanız gerekmekte. Aşağıdaki ekrandan java/Java Project sekmesini işaretleyin ve "next" düğmesine tıklayın.

"next" düğmesine tıkladıktan sonra aşağıdaki gibi bir ekran gelmesi gerekmekte. Bu ekranda "Project Name" kısmına projemizin adını yani "hbtutorial" yazın ve "next" düğmesine tıklayın.
"next" düğmesine tıkladıktan sonra aşağıdaki gibi bir ekranla karşılaşacaksınız. Bu ekranda herhangib bir değişiklik yapmadan "finish" düğmesine tıkayın.
"finish" düğmesine tıkladıktan sonra "hbtutorial" adındanki projemizin aşağıdaki gibi eclipse'nin sol proje listesinde görünmesi gerekir.

Artık elimizde bir Java projesi mevcut. Şimdi yapmamız gereken bu projeye Hibernate kütüphanelerini yüklemek. Bunun için öncelikle "lib" adında bir dizin oluşturmamız lazım. Kütüphanelerimizi bu dizin altında saklayacağız.
Yukarıdaki ekranda "hbtutorial" proje sekmesi üzerine sağ tıklayın ve new->folder sekmesini tıklayarak gelen ekranda "lib" yazıp "OK" tuşuna basarak dizini yaratın. Şimdi yapmamız gereken http://hibernate.org sitesine uğrayıp en son hibernate kütüphanelerini indirmek.
Hibernate'in faklı amaçlar için geliştirdiği farklı kütüphane paketleri mevcuttur. Bu paketlerden bize lazım olanlar aşağıda listelenmiştir.
- Hibernate Core
- Hibernate Annotations
- Hibernate Validators
Yukarıdaki paketlerimn en son sürümlerini indirdiğimizde aşağıda listelenen tarball'ların elimizde olması gerekiyor. (Dosya isimleri farklı zamanlarda sürümlerden dolayı farklı olabilir. Bu doküman yazıldığında en son sürümler aşağıdaki gibi idi.)
- hibernate-distribution-3.3.1.GA-dist.tar.gz
- hibernate-annotations-3.4.0.GA.tar.gz
- hibernate-validator-3.1.0.GA.tar.gz
Yapmamız gereken bu 3 paketi açıp içindeki jar dosyalarını "hbtutorial" projemizin lib dizinine kopyalamak. Bu kopyalamayı yaparken şuna dikkat edin. Her paket dizininini hemen altında jar dosyaları ve "lib" adında bir dizin mevcuttur. bu jar dosyalarını ve "lib" dizini altındaki jar dosyalarını kopyalayın. hibernate-distribution-3.3.1.GA paketinin "lib" dizini yapısı diğer 2 paketten biraz farklı. Bu pakette "lib" dizini altında aşağıdaki gibi 3 paket mevcut.
- required
- optional
- bytecode
Bu 3 paketeen ilk 2'si içindeki jar dosyalalarını bizim projemizde kopyalayacağız. "bytecode" dizini altındaki jar dosyalarına ihtiyacımız yok.
Dikkat etmemiz gereken bir nokta daha var. Yukarıdaki 3 pakette aynı jar dosyaları mevcut. Bu jar dosyalarını lib dizinimizde kopyaladığımızda aynı jar paketin farklı isimlerde kopyaları oluşacaktır. Bu paketler aşağıda listelenmiştir.
- dom4j-1.6.1.jar
- dom4j.jar
- javassist-3.4.GA.jar
- javassist.jar
"dom4j-1.6.1.jar" ve "javassist-3.4.GA.jar" kütüphanelerini silin.
Kütüphaneleri projemize taşımış olduk. Şimdi sıra bu kütüphaneleri "hbtutorial" projemize tanıtmakta.
"hbtutorial" projesine sağ tıklayın ve gelen açılır pencereden "properties" sekmesini seçin. Aşağıdaki gibi bir ekran gelmeli. Bu ekranın solundaki listeden "Java Build Path" sekmesini seçin, aşağıdaki gibi bir ekranla karşılaşmalısınız. Bu ekranın üstündeki tab sekmelerinden "Libraries" sekmesini seçiniz ve "Add JARs..." düğmesine tıklayınız.
"Add JARs..." düğmesine tıkladığınızda aşağıdaki gibi bir ekran ile karşılaşmalısınız. Bu ekranda "hbtutrial/lib" dizini altındaki tüm jar dosyalarını seçin ve ok tuşuna basın. Tekrar yukarıdaki ekrana geri döneceksiniz. Bu ekranda da OK tuşuna tıklayıp işlemi sonlandırın.

Şu an itibari ile Hibernate Kütüphanelerini hbtutorial projemizde tanıtmış durumdayız. Ama henüz işimiz bitmedi. Küçük bir POJO yapıp, projemizi test etmliyiz. Bunun için öncelike hibernate projemizi ayarlamalıyız. Hibernate projemizi ayarlamak demek, hibernate'in kendisini ayarlamak demek.
Hibernate ayarlamaları "hibernate.cfg.xml" dosyası aracılığı ile yapılmakta. (Aslında dosya isminin illa da hibernate.cfg.xml olmasına gerek yok. bunu biraz sonra anlayacaksınız.)
Aşağıdaki örnek bir hibernate.cfg.xml dosyası içeriği mevcut. hbtutorial/src dizini altında hibernate.cfg.xml dosyası yaratın ve aşağıdaki işçeriği bu dosyaya kopyalayın.
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> <property name="hibernate.connection.url" >jdbc:postgresql://192.168.46.53:5432/tvqdb </property> <property name="hibernate.connection.username" >admin</property> <property name="hibernate.connection.password" >12345</property> <property name="hibernate.connection.driver_class" >org.postgresql.Driver </property> <property name="hibernate.dialect" >org.hibernate.dialect.PostgreSQLDialect </property> <property name="hibernate.default_schema" >public </property> <property name="hibernate.show_sql" >true </property> <property name="hibernate.current_session_context_class" >thread </property> <property name="hibernate.cache_provider_class" >org.hibernate.cache.NoCacheProvider </property> <property name="hibernate.query.factory_class" >org.hibernate.hql.classic.ClassicQueryTranslatorFactory </property> <property name="hibernate.c3p0.max_size" >2 </property> <property name="hibernate.c3p0.min_size" >1 </property> <property name="hibernate.c3p0.max_size" >1 </property> <property name="hibernate.c3p0.min_size" >1 </property> <property name="hibernate.c3p0.timeout" >5000 </property> <property name="hibernate.c3p0.max_statements" >100 </property> <property name="hibernate.c3p0.idle_test_period" >300 </property> <property name="hibernate.c3p0.acquire_increment" >1 </property> <property name="hibernate.max_fetch_depth" >1 </property> <property name="hibernate.auto_commit" >true </property> </session-factory> </hibernate-configuration> |
Yukarıdaki hibernate.cfg.xml içeriği bir çok ayar içermekle birlikte bizi şu an ilgilendiren
- hibernate.connection.url
- hibernate.connection.username
- hibernate.connection.password
- hibernate.connection.driver_class
- hibernate.dialect
parametreleridir. Bu yukarıdaki beş parametre sırası ile,
- veri tabanı bağlantı noktamızı,
- veri tabanına bağlanırken kullanacağımız kullanıcıyı,
- veri tabanı kullanıcı parolasını,
- veri tabanı için jdbc sürücü sınıfını,
- hibernate veri tabanı betikleri üretirken hangi dialekt ile üreteceğini
Yukarıdaki örnek hibernate.cfg.xml dosyamızda bu parametreler ayarlanmış durumda. Siz de bu parametreleri var olan veri tabanını sunucunuza göre ayarlayın. Yalnız dikkat emeniz gereken bir nokta var. Yukarıda örnek olarak PostgreSQL veri tabanına göre ayarlama yapılmış, eğer farklı bir veri tabanı seçecekseniz o veri tabanının JDBC sürücüsünü hbturoail/lib dizinine kopyalayın ve projeye, yukarıda Jar dosyalarını tanıttığımız gibi, tanıtın. Ayrıca aşağıdaki parametreleri de veri tabanınızın özelliklerine göre değiştirin.
- hibernate.connection.url
- hibernate.connection.driver_class
- hibernate.dialect
Bu haliyle hbtutorial projemizin ayarlama işlemlerinin bir kısmını bitirmiş oluyoruz. Hala yapmamız gerekenler var. Bu yapılacakları açıklamdan önce biraz hibernate'in çalışmasından bahsedelim.
Hibernate çalıştığında projenizde "org.hibernate.Session" sınıfında tekil (singleton) bir obje yaratır. Bu obje statik ve değiştirilemzdir. Projeniz ilk ayağa kaldırıldığında sisteme yüklenir. Session objesi, ORM işlemlerini, obje ve dolayısı ile data saklama, silme, listeleme ve arama işlemlerini yapar. Yani hibernate'in ana parçasını oluşturur. Aslında bu konuyu daha geniş bir şekilde ifade etmek lazım ama bundan fazlası bu dokümanın konusu değil. Başka bir bolg yazısına.
Bizim amacımız bu objenin proje açılış aşamasında düzgün bir şekilde yüklenmesini sağlamak. Eğer bunu becerirsek, POJO yazımına geçebiliriz. Bu da aslında bir çeşit konfigürasyon işi. Ama biraz Java kodu yazmamız lazım.
Farklı bir çok yöntem olması ile birlikte internette gezen bazı dizayn şablonları mevcut. Bu dizayn şablonları aşağıdaki gibi bir sınıf yaratımını işaret etmekte.
| package basepack.hibernate; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.tool.hbm2ddl.SchemaExport; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { Configuration cfg = new AnnotationConfiguration(); cfg.configure("hibernate.cfg.xml"); cfg.buildMappings(); SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.setOutputFile("/tmp/db.sql"); schemaExport.setDelimiter(";"); schemaExport.create(true, false); sessionFactory = cfg.buildSessionFactory(); } catch (Throwable ex) { // Log exception! throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() throws HibernateException { return sessionFactory; } } |
Yukarıdakisınıfı yaratmak için öncelikle hbtutorial/src dizini altında "basepack" adında bir dizin yaratın. Ardından basepack dizini altında HibernateUtil.java dosyasını yaratıp yukarıdaki içeriği içine kopyalayın.
Şimdi yapmamız gereken bir main sınıfı yaratmak ve HibernateUtil.getSessionFactory() metodunu çağırmak.
Yine basepack dizini altında Main.java dosyasını yaratın ve aşağıdaki içeriği içine kopyalayın.
package basepack; import java.sql.Date; import java.util.List; import org.hibernate.Transaction; import org.hibernate.classic.Session; import basepack.hibernate.HibernateUtil; public class Main { public static void main (String [] args){ Session sess=(Session) HibernateUtil.getSessionFactory().getCurrentSession(); } } |
Şimdi tek yapmanız gereken Main.java dosyası üzerşne sağ tıklayıp "Run As-> Java Application" sekmesini tılamak ve herhangi bir hata ile karşılaşmamak.
Eğer bir hata ile karşılaşmadı iseniz, hibernate projemiz hazır demektir. Şimdi sıra bir pojo yaratmakta. O da bir sonraki blog yazımıza...
-halil agin.
Tags: Eclipse hibernate , Comments: 2
