Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

soru ekleme

Soru sormak için giriş yapmalısınız.

Giriş

Kayıt Ol

.........

JPA – ORM Bileşenleri

JPA – ORM Bileşenleri

Çağdaş uygulamaların çoğu verileri depolamak için ilişkisel veritabanı kullanır. Son zamanlarda, birçok satıcı veri bakımı üzerindeki yüklerini azaltmak için object database’e geçti. Object database veya object relational teknolojilerinin depolanması, geri alınması, güncellenmesi ve bakımıyla ilgilendiği anlamına gelir. Bu object relational teknolojilerinin temel kısmı orm.xml dosyasının eşlenmesidir. Xml derleme gerektirmediğinden, daha az yönetimle birden çok veri kaynağında kolayca değişiklik yapabiliriz.

Object Relational Mapping

Object Relational Mapping (ORM) kısaca ORM’nin ne olduğunu ve nasıl çalıştığını anlatır. ORM, veriyi nesne tipinden ilişkisel tipe çevirmek için bir programlama yeteneğidir ve bunun tersi de geçerlidir.

ORM’nin ana özelliği, bir nesneyi veritabanındaki verilerine eşlemek veya bağlamaktır. Haritalama yaparken veriyi, veri türünü ve başka herhangi bir tabloda kendi varlığı veya varlığı ile olan ilişkilerini göz önünde bulundurmalıyız.

Gelişmiş özellikler

  • Idiomatic persistence :Persistence sınıflarını object oriented sınıfları kullanarak yazmanıza olanak tanır. 
  • High Performance : Birçok alma tekniği ve ümit verici locklama teknikleri vardır.
  • Reliable : Çok sağlam ve seçkin. Birçok programcı tarafından kullanılır.

ORM Mimarisi

Burada ORM mimarisini görebilirsiniz

Yukarıdaki mimari, nesne verilerinin ilişkisel veritabanında üç aşamada nasıl depolandığını açıklar.

Faz 1

Object data aşaması olarak adlandırılan ilk aşama POJO sınıflarını, servis arayüzlerini ve sınıfları içerir. İş mantığı işlemleri ve öznitelikleri olan ana iş bileşeni katmanıdır.

Örneğin, bir Employee veritabanını şema olarak alalım.

  • Employee POJO sınıfı, ID, name, salary, ve  designation gibi özellikler içerir. Ve bu niteliklerin setter ve getter metodları gibi methodlar .
  • Employee DAO / Servis sınıfları çalışan oluşturma, çalışan bulma ve çalışanı silme gibi servis yöntemleri içerir.

Faz 2

JPA provider, eşleme dosyası (ORM.xml), JPA Loader ve Object Grid içeren mapping ve persistence aşaması olarak adlandırılan ikinci aşama.

  • JPA Provider : JPA flavor içeren satıcı ürünü (javax.persistence). Örneğin Eclipselink, Toplink, Hibernate, vb.
  • Mapping file : Eşleme dosyası (ORM.xml), bir POJO sınıfındaki veriler ile ilişkisel bir veritabanındaki veriler arasında eşleme yapılandırması içerir.
  • JPA Loader : JPA loader, ilişkisel grid data yükleyebilen önbellek gibi çalışır. POJO verileri (POJO sınıfının öznitelikleri) için hizmet sınıfları ile etkileşime girmek için veritabanının bir kopyası gibi çalışır.
  • Object Grid : Object grid, ilişkisel verilerin kopyasını, yani önbellek belleği gibi depolayabilen geçici bir konumdur. Veritabanına karşı tüm sorgular ilk olarak Object grid’deki veriler üzerinde etkilidir. Sadece taahhüt edildikten sonra ana veri tabanını etkiler.

Faz 3

Üçüncü aşama, İlişkisel veri aşamasıdır. İş bileşenine mantıksal olarak bağlanan ilişkisel verileri içerir. Yukarıda tartışıldığı gibi, sadece iş bileşeni verileri taahhüt ettiğinde, fiziksel olarak veritabanına depolanır. O zamana kadar, değiştirilen veriler bir önbellek hafızasında bir grid formatı olarak saklanır. Veri elde etmek için de işlem aynıdır.

Yukarıdaki üç fazın programatik etkileşiminin mekanizması object relational mapping olarak adlandırılır.

Mapping.xml

Mapping.xml dosyası, JPA ya Entity sınıflarını veritabanı tablolarıyla eşlemesi talimatını verir.

Dört özellik içeren bir Employee entity örneğini ele alalım. Employee.java adlı POJO Employee entity sınıfı, aşağıdaki gibidir:

Yukarıdaki kod Employee entity POJO sınıfıdır. Dört özellik eid, ename, salary ve deg içerir. Bu nitelikleri veritabanındaki tablo alanları olarak kabul edin ve eid bu tablonun birincil anahtarıdır. Şimdi bunun için hibernate mapping dosyasını tasarlamak zorundayız. Mapping.xml adlı eşleme dosyası aşağıdaki gibidir:

Entity sınıfını veritabanı tablosu ile eşlemek için yukarıdaki komut dosyası. Bu dosyada

  • <entity-mappings> : bu etiket , entity etiketlerinin xml dosyasına dahil edilmesine izin vermek için şema tanımını tanımlar.
  • <description> : bu etiket uygulama hakkındaki açıklamayı tanımlar.
  • <entity> : bu etiket , veritabanında tabloya dönüştürmek istediğiniz entity sınıfını tanımlar. Öznitelik sınıfı, POJO entity sınıfı adını tanımlar.
  • <table> : bu etiket tablo adını tanımlar. Sınıf adını tablo adı olarak tutmak istiyorsanız, bu etiket gerekli değildir.
  • <attributes> : bu etiket nitelikleri tanımlar (tablodaki alanlar).
  • <id> : etiketi tablonun birincil anahtarını tanımlar. <generated-value> etiketi, Otomatik, Elle veya Sıradan alınan gibi birincil anahtar değerinin nasıl atanacağını tanımlar.
  • <basic> : bu etiket , tablonun kalan özelliklerini tanımlamak için kullanılır.
  • <column-name> : bu etiket, kullanıcı tanımlı tablo alanı adını tanımlamak için kullanılır.

Annotation’lar

Genel olarak, Xml dosyaları belirli bir bileşeni yapılandırmak veya iki farklı bileşen eşlemeyi tanımlamak için kullanılır. Bizim durumumuzda, xml’i ayrı bir yapıda tutmamız gerekiyor. Bu, bir mapping xml dosyası yazarken, POJO sınıfı niteliklerini mapping.xml dosyasındaki entity etiketleriyle karşılaştırmamız gerektiği anlamına gelir.

İşte çözüm: Sınıf tanımında, anatasyonları kullanarak yapılandırma bölümünü yazabiliriz. Anatasyonlar sınıflar, özellikler ve methodlar için kullanılır. Anatasyonlar ‘@’ sembolüyle başlar. Anasyonlar sınıf, özellik veya method tanımlanmadan önce bildirilir. Tüm JPA anatasyonları javax.persistence paketinde tanımlanmıştır.

Annotation Açıklama 
@Entity Bu anatasyon, sınıfı entity veya tablo olarak bildirmeyi belirtir.
@Table Bu açıklama tablo adını bildirmeyi belirtir.
@Basic Bu açıklama, kısıtlama olmayan alanları açıkça belirtir.
@Embedded Bu açıklama, sınıfın veya gömülebilir bir sınıfın örneği olan bir varlığın özelliklerini belirtir.
@Id Bu açıklama, sınıfın kimliği (bir tablonun birincil anahtarı) için kullanılacak özelliği belirtir.
@GeneratedValue Bu açıklama, otomatik, manuel veya sequence tablosundan alınan değer gibi identity niteliğinin nasıl başlatılabileceğini belirler.
@Transient Bu açıklama, kalıcı olmayan, yani değerin hiçbir zaman veritabanına kaydedilmediği özelliği belirtir.
@Column Bu açıklama, persistence özelliği için sütun veya nitelik belirtmek için kullanılır.
@SequenceGenerator Bu açıklama, @GeneratedValue anatasyonunda belirtilen özellik için değer tanımlamak için kullanılır. Bir dizi oluşturur.
@TableGenerator Bu açıklama, @GeneratedValue anatasyonunda belirtilen özellik için değer üretecini belirtmek için kullanılır. Değer üretimi için bir tablo oluşturur.
@AccessType Bu açıklama türü erişim türünü ayarlamak için kullanılır. @AccessType (FIELD) olarak ayarlarsanız, Alan erişimini gerçekleşir. @AccessType (PROPERTY) ayarladıysanız Property değerlendirmesi gerçekleşecektir.
@JoinColumn Bu açıklama bir entity birliği veya entity koleksiyonunu belirtmek için kullanılır. Bu, bire bir ve bire çok ilişkilerde kullanılır.
@UniqueConstraint Bu açıklama alanı, birincil veya ikincil tablo için benzersiz kısıtlamayı belirtmek için kullanılır.
@ColumnResult Bu açıklama, select deyimi kullanılarak SQL sorgusunda bir sütunun adına atıfta bulunur.
@ManyToMany Bu açıklama join Tabloları arasında çoktan çoğa bir ilişki tanımlamak için kullanılır.
@ManyToOne Bu açıklama join Tabloları arasında çoga tek ilişki tanımlamak için kullanılır.
@OneToMany Bu açıklama join Tabloları arasında bire çok ilişki tanımlamak için kullanılır.
@OneToOne Bu açıklama join Tabloları arasında bire bir ilişki tanımlamak için kullanılır.
@NamedQueries Bu açıklama, adlandırılmış sorguların listesini belirlemek için kullanılır.
@NamedQuery Bu açıklama statik ad kullanarak bir Sorgu belirlemek için kullanılır.

Java Bean Standardı

Java sınıfı, örnek değerleri ve davranışları tek bir birim toplanmış nesneye yerleştirir. Java Bean geçici bir depolama ve yeniden kullanılabilir bileşen veya bir nesnedir. Örnek özniteliklerini ayrı ayrı başlatmak için varsayılan yapıcı ve getter & setter methodları olan serileştirilebilir bir sınıftır.

Bean Kuralları

  • Bean, varsayılan kurucuyu veya serileştirilmiş örneği içeren bir dosyayı içerir. Bu nedenle, bir bean somutlaştırabilir.
  • Bir bean’in özellikleri, Boolean özellikleri ve Boolean olmayan özellikleri olarak ayrılabilir.
  • Boolean olmayan özellik getter ve setter methodları içerir .
  • Boolean özelliği içeren setter ve bir method.
  • Herhangi bir property Getter methodu, küçük harfli ‘get’ ile başlamalı ve büyük harfle başlayan bir alan adı ile devam etmelidir. Örneğin, alan adı ‘salary’ dır, bu nedenle bu alanın getter methodu ‘getSalary ()’ dır.
  • Herhangi bir özelliğin Setter methodu, küçük harfli ‘set’  ile başlamalı, büyük harfle başlayan bir alan adı ve alana ayarlanacak argüman değeri ile devam etmelidir. Örneğin, alan adı ‘salary’ olduğundan, bu alanın setter methodu ‘setSalary (double sal)’ dır.
  • Boolean özelliği için, doğru mu, yanlış mı olduğunu kontrol etme methodudur. Örneğin Boolean özelliği ‘boş’, bu alanın methodu ‘isEmpty ()’.

Hakkında Hilal Saim

Namık Kemal Üniversitesi/Bilgisayar Mühendisliği

Beni Takip Et

Leave a reply

*