8 Eylül 2014 Pazartesi

Spring ve JPA (Hibernate)

         Spring çatısı kurumsal java uygulamalarında oldukça fazla karşılaşacağımız yapıdır. Çoğumuz katmanlı mimarinin faydalarını, projeye kattığı esnekliği pek çok kez duymuşuzdur. Spring bu kısımda devreye girer ve yapısı itibariyle:
  • DB işlemlerini ayrı bir katmanda
  • DB classları üzerinden tamalayacağımız süreçleri servis katmanında
  • Projenin Db connection ve Connection pool vb konfigürasyonlarını xml yada config classında 
yazmamız için bizi yönlendirir. Sonuç itibariyle herhangi bir sorun yada güncelleme halinde  yazılımcı hangi class'a yada config dosyasında değişiklik yapacağını ve sisteme etkisini tam öngörmüş olur.


 Örn :

Kullanıcı bilgilerini kaydettiğimiz bir tablomuz olsun. Bu tabloda yapabileceğimiz işlemler sil, kaydet,güncelle ve tablo yapısına göre tasarlayacağımız sorgu methodlarıdır.

Kullanıcı ile ilgili bir süreci barındıran methodu bu class içerisine yazmak:
  1. Süreci sadece DB işlemleri yapılan bir class'a bağımlı kılar,
  2. Kod okunurluğunu azaltır.
  3. Bir entegrasyon çalışmasında class web service, kullanıcı süreçleri ve db işlemlerini barındıracaktır. Görüldüğü gibi class üzerindeki yük artmakla beraber bizi esiri haline getirecektir :)
Bu tarz durumlar için service mantığı ortaya atılmıştır. Amaç db sürecini sadece db classında bırakmak ve db classındaki methodları kullanarak süreci işleyen yeni bir method yazmaktır.

Kullanıcı hesabından para çekme işlemini ele alalım. Bankanın bir hesap birde kullanıcı tablosu olsun. Kullanıcı tablosuna özel bir class yazarsak bu class taki methodları istediğimiz her yerde kullanabiliriz. Aynı durum hesap tablosu içinde geçerli.

Serviste yapacağımız iş şudur:

  • Kullanıcıyı bul,
  • Hesap bilgilerini bul
  • Tutarı hesaptan çek
  • Kullanıcıyı bilgilendir
Method kısaca şu şekilde olur :

public Boolean  paraCek(String kullaniciNo, float tutar){
.........................
}

Methodun içerisini doldurduğumuzda hem paraCekme sürecine sahip oluruz hemde bu süreci gerekli olan her yerde kullanabiliriz. B bankası da hesaptan para çekerken bu methodu kullanabilir. Süreç değişecekse sadece servis üzerinde değişir. Tabloda bir değişiklik olacaksa biz sadece tablo ve Java daki Entity karşılığını güncelleriz.

İste uzun uzun anlattığım bu işlemlerin tamamında spring ön planda olacaktır.

Spring ve JPA kullanılan Service ve DAO katmanlarını kullandığım örnek uygulama aşağıdaki gibidir. Uygulama Spring - JPA(Hibernate) kullanılarak hazırlandı. test isminde mysql de bir db oluşturun kullanıcı adı root şifre 1234 olsun. Yada var olan db'nizin ayarlarını resources altındaki
Project.properties dosyasında tanımlayın.

2 proje var. 1.si spring ve Jpa ile ilgili temel bilgiler için. 2. Proje ise yukarıda belirttiğim süreci işliyor.

Temel Spring JPA(Hibernate)

KULLANICI_HESAP_SPRING_JPA(HIBERNATE)

Ekran çıktıları :

Temel Spring JPA EKRAN ÇIKTISI

KULLANICI HESAP ISLEMLERI EKRAN CIKTISI

Katkılarından dolayı Dilaver DEMİREL ve Birol GÖKTEPE'ye teşekkürler.

İyi çalışmalar.

Hiç yorum yok:

Yorum Gönder