Bilginç IT Academy - JPA (Java Persistence API)

50
JPA (Java Persistence API) Turkey JUG Lideri Senior Java Developer Bilgisayar Mühendisi Mimar Aslan www.mimaraslan.com [email protected] JPA (Java Persistence API) Turkey Java User Group 11 Nisan 2014

Transcript of Bilginç IT Academy - JPA (Java Persistence API)

Page 1: Bilginç IT Academy - JPA (Java Persistence API)

JPA (Java Persistence API)

Turkey JUG Lideri Senior Java DeveloperBilgisayar Mühendisi

Mimar Aslan

[email protected]

JPA

(Java Persistence API)

Turkey Java User Group

11 Nisan 2014

Page 2: Bilginç IT Academy - JPA (Java Persistence API)

• 2006, Kırgızistan Türkiye Manas Üniversitesi, Bilgisayar Mühendisliğinden mezun oldum.

• Kendimi bildim bileli kurumsal Java projelerinde yazılım geliştiricisiyim.

• Teknik yazar, eğitmen, danışman ve konuşmacıyım.

• Turkey JUG (Java User Group) ve Turkey JBUG(JBoss User Group)’ın kurucusu ve lideriyim.

• Kurumsal firmalar için yazılım danışmanlık hizmetleri vermekteyim.

• Mesleki kariyerimi yurt içi ve yurt dışında sürdürmekteyim.

Mimar Aslan kimdir?

Page 3: Bilginç IT Academy - JPA (Java Persistence API)

• Java’da nesneler ve içerdikleri veriler uygulama çalıştığı zaman bellekte tutulurlar.

• Her nesnenin kendine özel durumları ve davranışları vardır.

Java Projelerinde Nesnelerin Kullanmı

• Nesnelerin davranışlarını metotlar belirler.

Konuş

Yürü

Bak

Alkışla

ŞımarGülümse

Page 4: Bilginç IT Academy - JPA (Java Persistence API)

• Çalışması bittikten sonra kullanılmayan nesneleri, çöp toplayıcı otomatik olarak bellekten temizler.

• Kurumsal uygulamalarda nesnelerin tekrardan kullanımı için nesnelerin yaşam sürelerini belirlemek çok önemlidir.

Çöp Toplayıcı (Garbage Collector)

Page 5: Bilginç IT Academy - JPA (Java Persistence API)

• Serializable ara yüzünü uygulayan Java sınıflarına ait nesneler kalıcı hale getirilirler.

• 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.

Serializable Ara yüzü(Interface) ve Yararları

Page 6: Bilginç IT Academy - JPA (Java Persistence API)

• Taşıdığı veriler üzerinde sorgu yapılamaz!

• Paralel erişimler ve dağıtık yapıda bilgi paylaşımlarına izin vermez!

Serializable Ara yüzü(Interface)‘in Yetersizlikleri

Page 7: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

POJO (Plain Old Java Object)

Page 8: Bilginç IT Academy - JPA (Java Persistence API)

• POJO’nun hiçbir ekstrası yoktur ve bütün yüklerden arınmıştır.

POJO (Plain Old Java Object)

Page 9: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

JDBC(Java Database Connectivity) ve Yararları

Page 10: Bilginç IT Academy - JPA (Java Persistence API)

• 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!

JDBC(Java Database Connectivity) ve Eksikleri

Page 11: Bilginç IT Academy - JPA (Java Persistence API)

• Verileri tablolar halinde kayıt altına alırlar.

• 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.

RDBMS (Relational Database Management System ) (İlişkisel Veritabanı Yönetim Sistemi)

Page 12: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM - O/R Mapping (Object Relational Mapping)(Nesne Veritabanı Haritalama)

Page 13: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM - O/R Mapping (Object Relational Mapping)(Nesne Veritabanı Haritalama)

Page 14: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM'nin Avantajları

Page 15: Bilginç IT Academy - JPA (Java Persistence API)

• ORM araçlarıyla veritabanından bağımsız, katmanlı uygulamalar geliştirebiliriz.

• ORM ilişkisel veritabanı (RDBMS) ile nesneye yönelik programlamanın (OO) dünyası arasında köprü vazifesi görür.

ORM'nin Avantajları

Page 16: Bilginç IT Academy - JPA (Java Persistence API)

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.

ORM Araçlarını Kullanmanın Yolları

Page 17: Bilginç IT Academy - JPA (Java Persistence API)

• 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ı

Page 18: Bilginç IT Academy - JPA (Java Persistence API)

• Hibernate

• Spring JdbcTemplate

• Apache OpenJPA

• Apache Cayenne

• EclipseLink

• iBatis

ORM Araçları

Page 19: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM Araçları

Page 20: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM Araçları

Page 21: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM Araçları Kullanmanın Yan Tesirleri

Page 22: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM Araçları Kullanmanın Yan Tesirleri

Page 23: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

ORM Araçları Kullanmanın Yan Tesirleri

Page 24: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

Java Persistence API - JPA Nedir?

Page 25: Bilginç IT Academy - JPA (Java Persistence API)

• 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?

Page 26: Bilginç IT Academy - JPA (Java Persistence API)

• 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

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.

Java Persistence API - JPA Nedir?

Page 27: Bilginç IT Academy - JPA (Java Persistence API)

• Java Persistence API, nesnelerin ve ilişkilerinin veritabanında eşlemesini standartlaştırır.

• 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.

Java Persistence API - JPA Nedir?

Page 28: Bilginç IT Academy - JPA (Java Persistence API)

• JPA, nesnelerin ilişkisel veri tabanında(Relational DataBase) haritalanıp erişilmesini bize sağlar.

Java Persistence API ile ORM

Page 29: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

JPA spesifikasyonu ve implementasyonu

Page 30: Bilginç IT Academy - JPA (Java Persistence API)

• Uygulamada JPA ile çalışmak kullandığınız ORM implementasyonlarıdan tamamen izole olmak demektir!

• JPA, uygulamayı ORM üreticisinden bağımsız kılar.JPA'nın Avantajları

Page 31: Bilginç IT Academy - JPA (Java Persistence API)

• İ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.

JPA'nın Avantajları

Page 32: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

JPA'nın Avantajları

Page 33: Bilginç IT Academy - JPA (Java Persistence API)

• 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ı

Page 34: Bilginç IT Academy - JPA (Java Persistence API)

Presentation Layer Gösterim Katmanı

Business Layer İşletme Katmanı

Persistence Layer Kalıcılık Katmanı

Kurumsal Java Uygulamalarının Mimarisi

Page 35: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

• Hibernate daha eski ve daha kapsamlıdır. JPA tasarlanırken bir çok yapısını Hibernate’ten örnek almıştır.

Kurumsal Java Uygulamalarının Mimarisi

Page 36: Bilginç IT Academy - JPA (Java Persistence API)

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!

Entity (Varlık) Nedir? Nasıl Kullanılır?

Page 37: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

Entity (Varlık) Nedir? Nasıl Kullanılır?

Page 38: Bilginç IT Academy - JPA (Java Persistence API)

• 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?

Page 39: Bilginç IT Academy - JPA (Java Persistence API)

• 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?

Page 40: Bilginç IT Academy - JPA (Java Persistence API)

• Kalıcı hale getirilmiş olan nesnelerin yaşam döngülerini sınıflar ve metotlar üzerinden takip edilerek kontrol edilmesine izin verir.

Callbacks (Çağırılar) - Listeners(Dinleyiciler)

Page 41: Bilginç IT Academy - JPA (Java Persistence API)

• Verilere paralel olarak yapılan erişimleri koltrol altında tutmak için bu mekanizmalardan yararlanabiliriz.

• JTA (Java Tranction API) sayesinde veri eşimlerine dair denetimleri kolayca sağlıyoruz.

Transaction ve Locking(Kilitleme)

Page 42: Bilginç IT Academy - JPA (Java Persistence API)

• 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.

Metadata (Üstveri)

Page 43: Bilginç IT Academy - JPA (Java Persistence API)

• 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)

Page 44: Bilginç IT Academy - JPA (Java Persistence API)

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!

Page 45: Bilginç IT Academy - JPA (Java Persistence API)

• Java sınıflarından veritabanındaki tablolardaki verileri JPA kullanarak sorgulamak için kullanılan sorgu dilidir.

• 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.

JPQL (Java Persistence Query Language)

Page 46: Bilginç IT Academy - JPA (Java Persistence API)

• 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!

JPQL (Java Persistence Query Language)

Page 47: Bilginç IT Academy - JPA (Java Persistence API)

• Veritabanındaki her tablo için aynı isme sahip bir tane java sınıfı(Entity Class) vardır.

• 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.

Persistence Unit ve Entity Classes

Page 48: Bilginç IT Academy - JPA (Java Persistence API)

Sorular & Cevaplar

Page 49: Bilginç IT Academy - JPA (Java Persistence API)

seminerine katılıp

beni sabırla dinlediğiniz için sizlere çok teşekkür ederim.

JPA

(Java Persistence API)

Turkey Java User Group

Turkey JUG Lideri Senior Java DeveloperBilgisayar Mühendisi

Mimar Aslan

[email protected]

Page 50: Bilginç IT Academy - JPA (Java Persistence API)