25 Mayıs 2013 tarihinde Azer JUG (Java User Group) , Azer OUG (Oracle User Group)'un birlikte düzenledikleri Java Web Teknolojileri Seminerine Azerbaycan Qafqaz Üniversitesinde konuşmacı olarak katıldım ve (Java Persistence API) JPA ve Hibernate framework ile ORM hakkında bir sunum yaptım.
4. Java Projelerinde Nesneler
• Java’da veriler uygulama çalıştığı zaman bellekte tutulurlar.
• Java nesnelerinin kendilerine has durumları ve davranışları
vardır.
• Nesne durumu tanımlanmış olan
değişkenin ve nesne refranslarının bellekte
ki tuttuğu veri değeri ve yaşam süresiyle
ilgilidir.
• Nesnelerin davranışlarını
metotlar belirler.
Konuş
Yürü
Bak
Alkışla
Oku
Gülümse
5. Çöp toplayıcı (garbage collector)
• Çalışması bittikten sonra kullanılmayan nesneleri, çöp toplayıcı
(garbage collector) otomatik olarak bellekten temizler.
• Kurumsal uygulamalarda nesnelerin tekrardan kullanımı için
nesnelerin kalıcılığını sağlamak çok önemlidir.
6. • Serializable ara yüzünü uygulayan
Java sınıflarına ait nesneler kalıcı
hale getirilirler.
Serializable Ara yüzü(Interface) ve Yararları
• Serializable Java’da nesneleri en kolay
yoldan kalıcı hale getirmeye yarar.
• Nesnelerin içerdiği veriler ağ
ortamında bit serileri halinde
taşınarak kalıcı disk ortamına da
kayıt edilirler.
• Çok katmanlı uygulamalarda katmanlar
arasında veri taşınırken veri kaybının
olmaması için Java sınıflarına uygulanır.
7. Serializable Ara yüzü(Interface)‘in Yetersizlikleri
• Taşıdığı veriler üzerinde
sorgu yapılamaz!
• Paralel erişimler ve dağıtık
yapıda bilgi paylaşımlarına izin
vermez!
8. POJO (Plain Old Java Object)
• POJO sınıfları sayesinde Java çatıları
arasında kolayca geçişler yapabiliriz.
• POJO içerisinde karmaşık işlemler
yapılmaz.
• POJO, JPA ve Hibernate kullanırken modellerimizi olusturmak
için kullanılır.
• POJO çok sade ve basit bir Java sınıfıdır.
• POJO sınıflarındaki nesneler Java’da
geri planda verileri geçici olarak
tutarlar.
9. POJO (Plain Old Java Object)
• POJO’nun hiçbir ekstrası yoktur ve bütün yüklerden arınmıştır.
10. JDBC(Java Database Connectivity) ve Yararları
• Java’da nesnelere ait verileri
varitabanlarına kaydederek
uzun süreli kalıcı hale
getirmekteyiz.
• JDBC ile babadan
kalma SQL sorgu dilini
kullanıp verileri
dilediğimiz gibi
sorgulayabiliriz.
11. JDBC(Java Database Connectivity) ve Eksikleri
• JDBC’de bağlantıların
açılması kapatılması ve
trancation gibi tüm
işlemleri bizim bizzat
yapmamız lazımdır!
• JDBC ile çok uzun
kodlamalar yapıldığından
dolayı en küçük kod
yanlış yazıldığında bile
çok ciddi hatalar
alabiliriz!
12. • Verileri tablolar halinde kayıt altına
alırlar.
RDBMS
(Relational Database Management System )
(İlişkisel Veritabanı Yönetim Sistemi)
• Bir sütun ise o kayıda ait bir alanı gösterir.
• Tablolar birbiri ile ilişki içinde organize
olabilirler.
• Her tablonun satırları ve sütunları vardır.
• Bir satır girilen bir kaydı gösterir.
13. ORM - O/R Mapping
(Object Relational Mapping)
(Nesne Veritabanı Haritalama)
• ORM Java sınıflarını veritabanındaki
tablolara dönüştürerek bizim veri
alışverişimizi kolaylaştıran bir
tekniktir.
ORM Araçları
• ORM ilişkisel veritabanındaki
tutulan verileri yönetmek için,
nesne modellerini kullanmamızı
sağlar.
• ORM ilişkisel veritabanı
(RDBMS) ile nesneye yönelik
programlamanın (OO) dünyası
arasında köprü vazifesi görür.
14. ORM - O/R Mapping
(Object Relational Mapping)
(Nesne Veritabanı Haritalama)
• ORM sayesinde bunların hepsini ve
daha fazlasını kolayca ve otomatik
olarak yapabiliyoruz.
• Eskiden OOP yazılımları geliştirirken her tabloya
karşılık gelen bir sınıfı kendimiz elle
oluşturuyorduk. Mesela Personel isminde bir sınıf
ve onun içinde de id , adi , soyadi , maasi
alan(field) ve özellikler(property)lerini
oluşturuyorduk. Ardından da JDBC ile Update,
Insert, Delete ve Select sorgularını hazırlıyorduk.
15. ORM'nin Avantajları
• ORM babadan kalma SQL sorgusu yazmamıza da izin verir.
• ORM tekniği sadece Java programlama
diline bağlı değildir ve her OO dilinde
kullanılabilir.
• ORM sayesinde veritabanıyla babadan kalma
SQL yerine nesneler üzerinden ORM aracına
özel sorgu dili ile kolayca yaparız.
• ORM ile gömülü SQL, stored procedürler ve
interfaceler ilişkisel veri tabanlarına göre daha
kısa kodlarla yazılır.
• ORM kullandığımız zaman kodlama zamanı
kısalır ve daha sonradan da kodun bakımı
kolaylaşır.
16. • ORM araçlarıyla veritabanından bağımsız, katmanlı
uygulamalar geliştirebiliriz.
ORM'nin Avantajları
• ORM ilişkisel veritabanı (RDBMS) ile nesneye yönelik
programlamanın (OO) dünyası arasında köprü vazifesi görür.
17. ORM Araçlarını Kullanmanın Yolları
• ORM araçları, proje geliştirmede çok pratik
destekler sağlamaktadır.
• 1.Yol veritabanımızı önceden biz kendimiz
hazırlarız. Sonra da java sınıflarını oluştururuz.
• 2.Yol önce java sınıflarımızı hazırlarız, ardından da
veritabanını tasarlarız.
• Bir projede hem ORM hem de kendi SQL ve
Java kodumuzu da yazabiliriz.
• ORM araçları veritabanı işlemlerinin
karmaşıklığını bizim için gizler ve
veritabanlarından bağımsız olarak nesne
modelimizle çalışmamızı sağlar.
18. • Günümüzde kullanılan
popüler programlama
dillerine özel bir çok ORM
kütüphaneleri vardır.
Bunlara ORM araçları (ORM
Tools) denir.
ORM ARACI
• ORM araçları code
generation tekniği
kullanarak bizim elle
yazmamız gereken kodları
otomatik üretir.
• ORM araçları sayesinde kod
yazımını kısalır ve yazılım
bakımını da kolaylaşır.
ORM Araçları
20. ORM Araçları
• Hibernate, bir Java standartı değildir ama
sektörde de-facto standart olarak kabul görmüştür!
• Kurumsal Java Web
projelerindeki en popüler ORM
aracı Hibernate’tir.
21. ORM Araçları
• ORM araçlarıyla, bir nesneyi
veritabanına kaydetme,
güncelleme, sorgulama ve silme
işlemi sıradan düz SQL
bağlantılarına göre daha güvenli
ve daha kolaydır.
• Her kütüphanenin kendine özgü metotları ve çalışma mantığı
vardır.
22. ORM Araçları Kullanmanın Yan Tesirleri
• Projelerde ORM aracı kullanmak
kesinlikle mecburi değildir!
• Büyük uygulamalar geliştiriyorsanız
kesinlikle bir tane ORM aracı
kullanmanızı yerinde olacaktır.
• ORM araçlarının kullanıldığı zaman en
büyük sorun performans sorunudur.
23. ORM Araçları Kullanmanın Yan Tesirleri
• ORM aracı tarafından üretilen SQL sorgu kodları her zaman
performanslı olmayabilir. Bazen otomatik oluşturulan sorguları
güzelleştirmek için değişiklikleri bizzat kendimiz yapmalıyız.
24. ORM Araçları Kullanmanın Yan Tesirleri
• Kontrolün tamamen bizim elimizde olmamasından dolayı geri
planda meydana gelen bazı sorunlara müdahale edemeyebilir! O
zaman saf SQL kodu yazmamız gerekebilir.
25. Java Persistence API - JPA Nedir?
• JPA, Java EE 5 ile gelen standart persistance yani verinin kalıcı
hale getirmesini sağlayan, bir ORM teknoloji API’sidir.
• JPA veritabanı tablosu ile kalıcılık nesnelerini eşleştirmek için
meta verileri kullanır.
26. • Annotataion(dipnot,
açıklama) tabanlıdır.
• EJB’lerin entity(varlık)
kısımlarını JPA oluşturur.
• JPQL sorgulama dili özelliği vardır.
• Bütün ORM araçlarına desteği vardır.
• Java EE standartıdır.
Java Persistence API - JPA Nedir?
27. Java Persistence API - JPA Nedir?
• JPA’nın çıkış amacı önceden mevcut olan diğer veri kalıcılığını
sağlayan kütüphanelerin ORM araçlarından Hibernate, Toplink,
JDO gibi... Ortak bir tanım altında birleştirmekti. Bugün JPA bunu
da başarmıştır!
• JPA’dan önce projelerde her kütüphane kendine özel API'sini
kullanırdı ve birinden diğerine geçiş zordu.
VERİ ERİŞİM KATMANI
JPA
• ORM ürünlerini JPA başlığı
altında kullanırsak istediğiniz
kütüphaneye kolayca geçiş
yapabiliriz.
• JPA bir persistence uygulaması
değildir. JPA persistence
uygulamalarını yöneten, bir
spesifikasyondur.
28. • Java Persistence API, nesnelerin ve
ilişkilerinin veritabanında eşlemesini
standartlaştırır.
Java Persistence API - JPA Nedir?
• JPA, ilişkisel verilerin (Relational Data),
Java nesneleriyle nasıl ilişkilendirileceği
üzerinde durur.
• Java’daki bir ve birden çok nesnenin
durumlarını ve veritabanındaki
karşılıklarının tutarlı olarak varlıklarını
devam ettirmesiyle JPA ilgilenir.
29. Java Persistence API ile ORM
• JPA, nesnelerin ilişkisel veri
tabanında(Relational
DataBase) haritalanıp
erişilmesini bize sağlar.
30. JPA spesifikasyonu ve implementasyonu
• Hibernate, EclipseLink, gibi... ORM araçları ise birer JPA
implementasyonudur.
• JPA, enterprise Java ve ORM dünyasındaki gelişmelerin
neticesinde ortaya çıkmış bir Persistence API’dir.
• Spesifikasyon kağıt üzerinde
uyulması gereken bir takım
tanımlamalardan ve
kurallardan ibarettir. JPA
• JPA, ORM araçlarının hepsininin çalışmasını tek çatı altında
toplayan bir spesifikasyondur.
• Bir spesifikasyonu iskelete benzetebiliriz.
• İmplementasyon ise spesifikasyonunun ete
kemiğe bürünmüş halidir.
31. JPA'nın Avantajları
• Uygulamada JPA ile çalışmak kullandığınız ORM
implementasyonlarıdan tamamen izole olmak demektir!
• JPA, uygulamayı ORM üreticisinden bağımsız kılar.
32. JPA'nın Avantajları
• İmplementasyonlar,
spesifikasyon ile uyumlu
oludurlar ve kendilerine
has özellikleri vardır.
• Uygulamalarda veri erişim
katmanında doğrudan ORM
implementasyonlarından birisini
kullanmak yerine, ORM
işlemlerimizi doğrudan JPA ile
gerçekleştirmenin daha çok
artıları vardır.
33. JPA'nın Avantajları
• JPA veritabanları ile bağlantı kurarken kendisine hangi
veritabanının driver(sürücü)'sünü gösterirseniz o veritabanı ile
bağlantıya geçer.
34. • JPA kendine ait bir sorgu dili
JPQL kullandığı için
veritabanlarına özel sorgu
kelimelerinden bağımsızdır.
Yani uygulamanın bilgilerini
depolayan veritabanınızı
istediğiniz an sorunsuzca
değiştirebilirsiniz.
• JPQL sorguları sayesinde uygulamın altında hangi veritabanı
olursa olsun farketmez. Sorgularınızı bütün veritabanları
sorunsuzca anlar ve algılar.
• Uygulamada sadece JPA ile çalışmak kullandığınız ORM
implementasyonlarıdan tamamen bağımsız izole olmaktır!
JPA'nın Avantajları
35. Java Application Architecture
(Java Uygulama Mimarisi)
Presentation Layer
Gösterim Katmanı
Business Layer
İş Katmanı
Persistence Layer
Kalıcılık Katmanı
36. Presentation Layer
Gösterim Katmanı
Business Layer
İş Katmanı
Persistence Layer
Kalıcılık Katmanı JPA
JMS
EJB
JSF
JSP
Java Application Architecture
(Java Uygulama Mimarisi)
• Uygumala içindeki Kalıcılığı Katmanı bizim için çok önemlidir.
JPA ve ORM araçları bu katmanda vazife alırlar.
37. Java Application Architecture
(Java Uygulama Mimarisi)
Presentation Layer
Gösterim Katmanı
Business Layer
İş Katmanı
Persistence Layer
Kalıcılık Katmanı
38. • JPA'nın bir Java standartı
olduğunu asla
unutmayalım. Hibernate
onu implement eder. JPA
eşittir Hibernate gibi
düşünmek doğru değildir!
JPA bütün ORM
araçlarının üzerinde ince
bir katmandır.
Java Application Architecture
(Java Uygulama Mimarisi)
• Hibernate daha eski ve
daha kapsamlıdır. JPA
tasarlanırken bir çok
yapısını Hibernate’ten
örnek almıştır.
39. JPA - Java Persistence API Architecture
(Java Kalıcılık API Mimarisi)
Query
Interface
JPQL
Query
Methods
Persistence Objects
(Kalıcılık Nesnesleri)
Query API
Sorgu
Metotları
Sorgulama
Dili
Sorgu Ara
yüzü
40. Entity (Varlık) Nedir?
Nasıl Kullanılır?
• Bir nesnenin entity olması için o nesnin sınıfın üzerinde
@Entity dipnotunun olması yeterlidir.
• Entity nesneleri
veritabanına
haritalandığı için
bellekten silinse
bile
veritabanındaki
karşılığı durur.
• Inner class(iç sınıf)tan, bir interface(ara yüz)den, tipi enum olan
bir değişkenden, erişim belirteci olarak final kullanan bir sınıftan
veya da nesneden entity olmaz!
41. Entity (Varlık) Nedir?
Nasıl Kullanılır?
• Entity olmak isteyen bir sınıfın public veya da protected erişim
tipinde boş parametreli yapılandırıcısı olmalıdır.
• Java’da nesneler ana bellekte yaşarlar. Entity’ler de bir Java
nesnesidir. Java’da her şey nesnedir.
• JPA’yı kullanarak ilişkisel veritabanına haritalanıp kalıcı hale
getirilecek olan nesnelere Entity (Varlık) denir.
42. • JPA tarafından
veritabanına bir defa
haritalan bir Java
nesnesi artık Entity
nesnesi olarak
muamele görür ve
JPA’nın emrinde
yönetilmeye hazırdır!
• Entity nesneleri ile nesne yönelimli programlama dünyasındaki
veri soyutlama (data abstraction) çok biçimlilik (polymorphisim)
kalıtım (inheritance) ilişkiler ve bağlantılar (association) gibi...
Aklınıza gelebilecek tüm işleri ilişkisel veritabanlarına başarıyla
aktarabiliriz.
Entity (Varlık) Nedir?
Nasıl Kullanılır?
44. • Tablolarımız veritabanında oluşturulduktan sonra entity
manager ile arama, ekleme, düzenleme ve silme gibi... Bütün
işlemleri yönetebiliriz.
EntityManager Nedir?
Nasıl Kullanılır?
46. • Verilere paralel olarak yapılan erişimleri koltrol altında tutmak
için bu mekanizmalardan yararlanabiliriz.
Transaction ve Locking(Kilitleme)
• JTA (Java Tranction API)
sayesinde veri eşimlerine
dair denetimleri kolayca
sağlıyoruz.
47. Metadata (Üstveri)
• Metadata veriyi tanımlamaktır. Verinin nasıl kullanılacağını ve
sistemlerin verileri nasıl yöneteceğini de metadata tarif eder.
• Veri hakkındaki bilgiye metadata (üstveri) denir.
• JPA bir sınıfı veritabanına dönüştürürken metadatalardan
yararlanır.
• Bu tabloda bazı alanlar
var, her bir alanın boyu
ve tipi bunun gibi
özelliklerin hepsi
metadata'dır.
48. • Notasyonlar XML yapılandırma dosyasında yaptığımız
ayarların daha pratik olarak Java kodunda yapılmasıdır.
• Notasyonlar sayesinde Java uygulamalarında ayarları tutan
XML dosyalarına olan ihtiyaç daha aza inmiştir!
• Dipnotlar - Notasyonlar (Annotations) ile
Entitiy’lerin meta veri özelliklerini Java
kodunda belirlemeye yararlar.
• Notasyonlar @ işareti ile başlar. Sınıfların,
nesnelerin, değişkenlerin, metotların kısaca Java
sınıflarındaki yer alan her şeyin hemen bir üst
satırında kullanılarak işimizi oldukça kolaylaştırırlar.
Dipnotlar - Notasyonlar (Annotations)
49. Dipnotlar - Notasyonlar (Annotations)
• Notasyonlar sayesinde veritabanına tablo olarak haritalanacak
olan Java sınıfının içinde tabloya dair özellkilerini de belirtmiş
oluyoruz!
50. • Java sınıflarından veritabanındaki tablolardaki verileri JPA
kullanarak sorgulamak için kullanılan sorgu dilidir.
JPQL (Java Persistence Query Language)
• SQL cümlelerini JPA teknolojisi JPQL dili ile kendisi oluşturur.
• JPQL aslında babadan
kalma SQL sorgu diline
benzer tarzda aynı
mantıkta çalışır ama SQL
değildir! Sorgu söz dizimleri
farklıdır.
51. JPQL (Java Persistence Query Language)
• Hibernate Query Language (HQL) adında Hibernate’in de
kendine has bir sorgu dili vardır. HQL ile JPQL arasında da
bazı küçük söz dizimi farkları vardır.
• Babadan kalma SQL ile JPQL sorgu dilini aynı anda
kullanabiliriz.
• HQL ve JPQL sorgu dilini
aynı anda kullanamayız!
52. • Veritabanındaki her tablo için aynı isme sahip bir tane java
sınıfı(Entity Class) vardır.
Persistence Unit ve Entity Classes
• Persistence unit, doğrudan veritabanı ile iletişim halinde olma
zorunluluğumuzu ortadan kaldırır.
• Persistance
unit veritabanı ile
uygulama arasında
kurulan köprüdür.
53. Persistenece.xml Ayar Dosyası
• JPA ve veritabanıyla ilgili olarak yapılacak
ayarları persistence.xml isimli bir dosyada yapılmaktadır.
157. Güzel gören, güzel düşünür.
Güzel düşünen, hayatından lezzet alır.
B.S.N.
JPA ve Hibernate ile ORM seminerine
katılıp beni sabırla dinlediğiniz için
sizlere çok teşekkür ederim.
Bilgisayar Mühendisi Mimar ASLAN
www.udemy.com/u/mimaraslan
mimaraslan@gmail.com