Java Persistence API (JPA) Extensions Reference for EclipseLink
Bilginç IT Academy - JPA (Java Persistence API)
-
Upload
mimar-aslan -
Category
Software
-
view
466 -
download
0
Transcript of Bilginç IT Academy - JPA (Java Persistence API)
JPA (Java Persistence API)
Turkey JUG Lideri Senior Java DeveloperBilgisayar Mühendisi
Mimar Aslan
JPA
(Java Persistence API)
Turkey Java User Group
11 Nisan 2014
• 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?
• 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
• Ç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)
• 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ı
• 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
• 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)
• POJO’nun hiçbir ekstrası yoktur ve bütün yüklerden arınmıştır.
POJO (Plain Old Java Object)
• 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ı
• 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
• 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)
• 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)
• 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)
• 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ı
• 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ı
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ı
• 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ı
• Hibernate
• Spring JdbcTemplate
• Apache OpenJPA
• Apache Cayenne
• EclipseLink
• iBatis
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.
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.
ORM Araçları
• 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
• 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
• 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
• 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?
• 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?
• 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?
• 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?
• JPA, nesnelerin ilişkisel veri tabanında(Relational DataBase) haritalanıp erişilmesini bize sağlar.
Java Persistence API ile ORM
• 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
• 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ı
• İ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ı
• 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ı
• 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ı
Presentation Layer Gösterim Katmanı
Business Layer İşletme Katmanı
Persistence Layer Kalıcılık Katmanı
Kurumsal Java Uygulamalarının Mimarisi
• 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
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?
• 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?
• 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?
• 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?
• 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)
• 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)
• 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)
• 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)
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!
• 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)
• 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)
• 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
Sorular & Cevaplar
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