Hibernate Nedir?

June 1, 2008 – 11:47 pm

Bilindiği üzere günümüzde kurumsal uygulamalar vakitlerinin büyük bir kısmını veri tabanında geciriyor. Dolayısıyla da ilişkisel tabanlar artık heryerde kullanılmakta ve SQL dili de bu sayede gelişmekte (kıssadan hisse gibi oldu:)).

Günümüz popüler programlama dillerinden olan java da bildiğiniz gibi diğer programlama dilleri gibi ilişkisel tabanlara erişim yapabiliyor ve kullandığı yönteme JDBC deniyor yani Java Database Connectivity.
Ancak java da uygulama geliştirenler ve büyük projelerle uğraşanlar bilirler ki direkt JDBC ile karşımıza
problemler çıkabilmekte. Öncelikle basmakalıp SELECT /INSERT/UPDATE/DELETE yazmak bir hayli kültefli ve yorucu bir iş. Bunun yanında uygulama kodlarının veri şemasına bağlılığı çok fazla ve nesnesel bir programlama dili olan java maalesef veriye nesnesel olmayan bir yol ile ulaşıyor.Ayrıca önbellekleme de elle yapılmakta.Tüm bu problemler her ne kadar önceleri problem sınıfına dahil edilmeseler de (problemden çok biz buna zorluk diyelim) Hibernate teknolojisinin getirdiği kolaylık ile birer problem sınıfına dahil edilebilir oldular.

Durum böyle olunca Gavin King amcamız proje grubuna bir gün döndü ve şöyle dedi :”Beyler gelin bi teknoloji geliştirelim hem setXX ile veri koyduğumuz nesneler zahmetsiz bi şekilde veri tabanında doğru yere yazılsın, hem de güncelleme /ekleme/ silme işlemlerini rahat bir şekilde nesneler üzerinden yapmamızı sağlasın. Bunları yaparken de sql benzeri bir sorgulama dili kullanalım.”


Kafadaki bu teknoloji kağıda dökülmeden önce bunun gibi farklı birimlere ait bir çok deneme olmuştu. Toplink bu alandaki ilklerdendi.POS standart bazlıydı.Idl odaklıydı ve işler kod yoktu. JDE bu kulvarda iyi bir deneme olmuştu ancak derleme sürecinde baytkodun işlenmesi gerekiyordu. Entity Bean ise hem bir servis objesi hem de bir kalıcılık birimiydi ancak programlama külfetli ve performans kötüydü.

Bunlar da işe yaramayınca Hibernate projesi, kalıcılık işini doğru yapmaya talip oldu. Proje lideri Gavin King, şunlara odaklandı:

  • Kalıcı nesneler, En Basit Java Nesneleri (POJO - Plain Old Java Object) kavramı üzerine kurulmalı (başka bir nesneden extend edilmesi beklenmemeli)
  • Teknolojinin kullanımı rahat olmalı - 10 dakika içinde kurulabilmeli, ve basit bir kod işletilebilmeli.
  • Körükörüne bir standart oluşturmakta üstelenmemeli.
  • Veriye erişim, aynen RDBMS’lerde oldugu gibi güçlü bir sorgulama dilini desteklemeli.

Ve böylece bu teknoloji bu amaçlarla ortaya çıkıverdi ve birçok programcının işlerini kolaylaştırdı.Nedir peki bu kolaylıklar.Üstünkörü geçtik ama detaya inmek istersek bunlardan birine örnek vererek yazımı sonlandıracağım.

Hibernate’in sql benzeri bir sorgulama dili kullanacağını söylemiştik. Peki neden standart sql değil de Hibernate SQL (HQL)? İşte bu noktada aslında detay olan ancak tüm mantığı ve sağlanan kolaylıkları bize anlatan bir örnek vereceğim. Düşünün ki elimizde(elimizde dediysem veri tabanında demek istedim:) ) 100 satırlık bir veri var. Bu satırları 100 kere dönerek basit tek bir UPDATE yazmak mı daha performanslıdır, yoksa çetrefil ama tek bir UPDATE komutu mu?

İşte örneğimiz:
Bu mu?

1
2
3
4
5
6
7
8
ResultSet rs = ...
while (rs.next()) {
String sql = "UPDATE MUSTERI set miktar = " +
rs.getInteger("MIKTAR") + " " +
"where ID="+rs.getString("ID");
PreparedStatement ps = c.prepareStatement(sql);
ps.execute();
}

Yoksa bu mu?

1
2
3
4
5
String sql = "UPDATE MUSTERI, BORCLU_MUSTERI SET " +
"MUSTERI.miktar = BORCLU_MUSTERI.miktar "+
"WHERE MUSTERI.id = BORCLU_MUSTERI.id";
PreparedStatement ps = c.prepareStatement(sql);
ps.execute();

Bu da gösteriyorki Hibernate ile artık SQL elle yazılmayacak ancak Hibernate tarafından üretilecek, zorlu sorgulamalar için ancak HQL’e izin verilecek ve son ama en önemli sonuç ise (yukarıda tüm mantığı anlatan kısımdan kastım burasıydı) HQL’e parametre ve geri gelen sonuç, artık obje olabiliyor. Ki bu da en başta anlattığım tüm o problemler ortadan kalkıyor demek oluyor.

Özetlemek gerekirse artık herşey bir obje oluyor ve bu da demek oluyorki object oriented bir dil ile veriyi yakalama çocuk oyuncağı oluyor.***

Umarım öğrendiğim ve araştırdığım kadarıyla, anlaşılır bir üslupla yüzeysel olarak Hibernate nedir anlatabilmişimdir. Sonraki yazılarımda Hibernate teknolojisinin nesne-tablo ilişkilerini,aradaki bu bağ nasıl sağlanır gibi detayları kısacası Hibernate’in içeriğini, yapısını bulabileceksiniz. Son olarak Wikipedia’dan Hibernate açıklamasını alıntı yapıp yazımı bitiriyorum:

Hibernate, Java platformunda yazılmış bir ORM (Object/Relational Mapping) aracıdır. ORM, nesne odaklı (object oriented) dillerdeki nesnelerin, ilişkisel veritabanlarındaki (relational databases) kayıtlara nasıl karşılık geldiğini yürüten bir teknolojidir.

Hibernate gibi ORM araçlarıyla, bir nesneyi veritabanına kaydetmek, yeni halini güncellemek ve sorgulama yapmak düz SQL bağlantılarına göre çok kolaydır.

Örneğin, JDBC ile veritabanına bir kayıt eklemek için şuna benzer bir kod yazılır:

1
stmt.executeUpdate( "INSERT INTO KAHVE VALUES ('Colombian', 101, 7.99, 0, 0)");

Burada, “KAHVE” tablosuna bir kayıt eklenmekte. Böyle bir işlemi Hibernate ile yapmak için:

1
session.saveOrUpdate(kahve);

kahve, bildiğimiz düz bir java nesnesidir (POJO).

Hibernate gibi ORM araçlarının en önemli faydası, kod yazımını kısaltmak veya kolaylaştırmaktan öte, yazılım bakımını kolaylaştırmasıdır. Veritabanı temelli uygulamalarda, kodun 1/3´ü veritabanı erişimine yöneliktir. Veritabanındaki bir kolonunun tipinin değişmesi, yeni bir kolon eklenmesi gibi değişiklikler, bütün veri erişim kodunu tekrar gözden geçirmeyi gerektirir. Hibernate ile bu gözden geçirmeden çok yüksek oranda tasarruf edilir. Hibernate kullanılan yazılımlarda, veritabanındaki değişikliklerde yapılması gereken sadece nesnelerle tabloların birbirine nasıl eşleştirildiğinin (mapping) gözden geçirilmesidir.

Hibernate, son 3 sene içinde, kurumsal java uygulamalarında fiilen standart haline gelmiştir. EJB 2.0 versiyonundaki Entity Beanler, yeni EJB 3.0 versiyonunda Hibernate´e yakın bir API haline gelmiştir.

BarTiMaEuS the coeker

*** Bunlar şu an için java ve c#. Başlangıçta Hibernate sadece java ile çalışıyordu ancak daha sonra C# versiyonu olan NHibernate de çıktı.

Dökümana buradan da ulaşabilirsiniz.

  1. One Response to “Hibernate Nedir?”

  2. Your blog is interesting!

    Keep up the good work!

    By Alex on Aug 17, 2008

Post a Comment