JPA - ORM Bileşenleri

Çoğu çağdaş uygulama, verileri depolamak için ilişkisel veritabanını kullanır. Son zamanlarda, birçok satıcı veri bakımı üzerindeki yüklerini azaltmak için nesne veritabanına geçti. Bu, nesne veritabanı veya nesne ilişkisel teknolojilerinin depolama, geri alma, güncelleme ve bakımla ilgilendiği anlamına gelir. Bu nesne ilişkisel teknolojilerin temel kısmı, orm.xml dosyasının eşleştirilmesidir. Xml derleme gerektirmediğinden, daha az yönetimle birden çok veri kaynağında kolayca değişiklik yapabiliriz.

Nesne İlişkisel Haritalama

Nesne İlişkisel Haritalama (ORM), kısaca ORM'nin ne olduğunu ve nasıl çalıştığını anlatır. ORM, verileri nesne türünden ilişkisel türe veya tersine çevirmek için bir programlama becerisidir.

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 tablodaki öz varlığı veya varlığı ile ilişkilerini dikkate almalıyız.

Gelişmiş özellikler

  • Idiomatic persistence : Nesneye yönelik sınıfları kullanarak kalıcılık sınıflarını yazmanıza olanak sağlar.

  • High Performance : Birçok getirme tekniği ve umut verici kilitleme tekniği vardır.

  • Reliable: Oldukça kararlı ve seçkin. Birçok endüstriyel programcı tarafından kullanılmaktadır.

ORM Mimarisi

İşte ORM mimarisini izleyin.

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

Faz 1

Olarak adlandırılan ilk aşama Object dataaşaması POJO sınıflarını, hizmet arayüzlerini ve sınıflarını içerir. İş mantığı işlemlerine ve niteliklerine sahip olan ana iş bileşeni katmanıdır.

Örneğin bir çalışan veritabanını şema olarak ele alalım-

  • Çalışan POJO sınıfı, kimlik, ad, maaş ve atama gibi öznitelikleri içerir. Ve bu özniteliklerin ayarlayıcı ve alıcı yöntemleri gibi yöntemler.

  • Çalışan DAO / Hizmet sınıfları, çalışan oluşturma, çalışan bulma ve çalışanı silme gibi hizmet yöntemlerini içerir.

Faz 2

İkinci aşama mapping veya persistence JPA sağlayıcısı, eşleme dosyası (ORM.xml), JPA Yükleyici ve Nesne Izgarası içeren aşama.

  • JPA Provider: JPA çeşidi (javax.persistence) içeren satıcı ürünü. Örneğin Eclipselink, Toplink, Hazırda Beklet vb.

  • Mapping file : Eşleme dosyası (ORM.xml), bir POJO sınıfındaki veriler ile ilişkisel bir veritabanındaki veriler arasındaki eşleme yapılandırmasını içerir.

  • JPA Loader: JPA yükleyici, ilişkisel ızgara verilerini yükleyebilen önbellek gibi çalışır. POJO verileri (POJO sınıfının öznitelikleri) için hizmet sınıflarıyla etkileşimde bulunmak için veritabanının bir kopyası gibi çalışır.

  • Object Grid: Nesne ızgarası, ilişkisel verilerin kopyasını, örneğin bir önbellek gibi depolayabilen geçici bir konumdur. Veritabanına yönelik tüm sorgular ilk olarak nesne ızgarasındaki veriler üzerinde gerçekleştirilir. Ancak işlendikten sonra ana veritabanını etkiler.

3. Aşama

Üçüncü aşama, İlişkisel veri aşamasıdır. İş bileşenine mantıksal olarak bağlı ilişkisel verileri içerir. Yukarıda tartışıldığı gibi, yalnızca iş bileşeni verileri işlediğinde, fiziksel olarak veritabanında depolanır. O zamana kadar, değiştirilen veriler bir ızgara biçimi olarak bir önbellekte saklanır. Aynı veri elde etme işlemidir.

Yukarıdaki üç aşamanın programatik etkileşiminin mekanizmasına nesne ilişkisel haritalama denir.

Mapping.xml

Mapping.xml dosyası, JPA satıcısına Varlık sınıflarını veritabanı tablolarıyla eşleme talimatı vermek içindir.

Dört öznitelik içeren bir Çalışan varlığı örneğini ele alalım. POJO sınıfı Çalışan varlığının adıEmployee.java Şöyleki:

public class Employee {

   private int eid;
   private String ename;
   private double salary;
   private String deg;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }
   
   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }
}

Yukarıdaki kod Çalışan varlık POJO sınıfıdır. Dört nitelik eid, ename, maaş ve derece içerir. Bu özniteliklerin veritabanındaki tablo alanları olduğunu ve eid'in bu tablonun birincil anahtarı olduğunu düşünün. Şimdi bunun için hazırda bekletme haritalama dosyası tasarlamamız gerekiyor. Adlı eşleme dosyasımapping.xml Şöyleki:

<? xml version="1.0" encoding="UTF-8" ?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm    
   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
   version="1.0">
      
   <description> XML Mapping file</description>
      
   <entity class="Employee">        
      <table name="EMPLOYEETABLE"/>
      <attributes>
      
         <id name="eid">
            <generated-value strategy="TABLE"/>
         </id>

         <basic name="ename">
            <column name="EMP_NAME" length="100"/>
         </basic>
         
         <basic name="salary">
         </basic>
         
         <basic name="deg">
         </basic>
         
      </attributes>
   </entity>
   
</entity-mappings>

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

  • <entity-mappings> : tag, varlık etiketlerinin xml dosyasına girmesine izin vermek için şema tanımını tanımlar.

  • <description> : etiketi, uygulama hakkındaki açıklamayı tanımlar.

  • <entity>: tag, bir veritabanında tabloya dönüştürmek istediğiniz varlık sınıfını tanımlar. Öznitelik sınıfı, POJO varlık sınıfı adını tanımlar.

  • <table>: etiket, tablo adını tanımlar. Sınıf adını tablo adı olarak tutmak istiyorsanız, bu etiket gerekli değildir.

  • <attributes> : etiketi öznitelikleri (bir tablodaki alanlar) tanımlar.

  • <id>: etiketi, tablonun birincil anahtarını tanımlar. <generated-value> etiketi, Otomatik, Manuel veya Sıradan alınan gibi birincil anahtar değerinin nasıl atanacağını tanımlar.

  • <basic> : etiketi, tablo için kalan öznitelikleri tanımlamak için kullanılır.

  • <column-name> : etiketi, kullanıcı tanımlı tablo alanı adını tanımlamak için kullanılır.

Ek açıklamalar

Genellikle Xml dosyaları, belirli bir bileşeni yapılandırmak veya bileşenlerin iki farklı özelliğini eşlemek için kullanılır. Bizim durumumuzda, xml'yi bir çerçevede ayrı ayrı tutmalıyız. Bu, bir eşleme xml dosyası yazarken, POJO sınıf özniteliklerini mapping.xml dosyasındaki varlık etiketleriyle karşılaştırmamız gerektiği anlamına gelir.

İşte çözüm: Sınıf tanımında, konfigürasyon kısmını notları kullanarak yazabiliriz. Ek açıklamalar sınıflar, özellikler ve yöntemler için kullanılır. Ek açıklamalar "@" simgesiyle başlar. Ek açıklamalar, sınıf, özellik veya yöntem bildirilmeden önce bildirilir. JPA'nın tüm ek açıklamaları javax.persistence paketinde tanımlanmıştır.

Örneklerimizde kullanılan ek açıklamalar listesi aşağıdadır

Ek açıklama Açıklama
@Etkinlik Bu ek açıklama, sınıfı varlık veya tablo olarak bildirmeyi belirtir.
@ Tablo Bu açıklama, tablo adının açıklanacağını belirtir.
@Temel Bu açıklama, kısıtlama olmayan alanları açıkça belirtir.
@ Gömülü Bu açıklama, gömülebilir bir sınıfın değeri örneği olan sınıfın veya bir varlığın özelliklerini belirtir.
@İD Bu açıklama, sınıfın kimliğini (bir tablonun birincil anahtarı) kullanma özelliğini belirtir.
@GeneratedValue Bu açıklama, Otomatik, manuel veya sıra tablosundan alınan değer gibi kimlik özniteliğinin nasıl başlatılabileceğini belirtir.
@Geçici Bu açıklama, kalıcı olmayan, yani değerin asla veritabanında saklanmadığı özelliği belirtir.
@ Sütun Bu açıklama, kalıcılık özelliği için sütun veya öznitelik belirtmek için kullanılır.
@SequenceGenerator Bu açıklama, @GeneratedValue açıklamasında belirtilen özelliğin değerini tanımlamak için kullanılır. Bir dizi yaratır.
@TableGenerator Bu açıklama, @GeneratedValue ek açıklamasında belirtilen özellik için değer oluşturucuyu belirtmek için kullanılır. Değer üretimi için bir tablo oluşturur.
@Erişim türü Bu tür açıklama, erişim türünü ayarlamak için kullanılır. @AccessType (FIELD) ayarını yaparsanız, Alan bilge erişim gerçekleşir. @ AccessType (PROPERTY) ayarını yaparsanız, Mülkiyet açısından değerlendirme yapılır.
@Fotomac Bu açıklama, bir varlık ilişkilendirmesini veya varlık koleksiyonunu belirtmek için kullanılır. Bu, çoktan bire ve bire çok ilişkilendirmelerde kullanılır.
@Hayalhanemersin 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 deyimini kullanarak SQL sorgusundaki bir sütunun adına başvurur.
@Hayalhanemersin Bu açıklama, birleştirme Tabloları arasında çoktan çoğa bir ilişki tanımlamak için kullanılır.
@Çoktan bire Bu açıklama, birleştirme Tabloları arasında çoka bir ilişki tanımlamak için kullanılır.
@OneToMany Bu açıklama, birleştirme Tabloları arasında bire çok ilişkisini tanımlamak için kullanılır.
@Bire bir Bu açıklama, birleştirme Tabloları arasında bire bir ilişki tanımlamak için kullanılır.
@AdanaSorgular Bu açıklama, adlandırılmış sorguların listesini belirlemek için kullanılır.
@NamedQuery Bu açıklama, statik ad kullanarak bir Sorgu belirtmek için kullanılır.

Java Bean Standardı

Java sınıfı, örnek değerlerini ve davranışları tek bir birim çağrılı nesnede kapsüller. Java Bean, geçici bir depolama ve yeniden kullanılabilir bileşen veya bir nesnedir. Örnek niteliklerini ayrı ayrı başlatmak için varsayılan yapıcı ve alıcı & ayarlayıcı yöntemlerine sahip serileştirilebilir bir sınıftır.

Fasulye Konvansiyonları

  • Bean, varsayılan kurucuyu veya serileştirilmiş örnek içeren bir dosyayı içerir. Bu nedenle, bir fasulye, fasulyeyi somutlaştırabilir.

  • Bir fasulyenin özellikleri Boolean özelliklerine ve Boole olmayan özelliklere ayrılabilir.

  • Boole olmayan özellik şunları içerir: getter ve setter yöntemler.

  • Boole özelliği şunları içerir: setter ve is yöntem.

  • Getterherhangi bir özelliğin yöntemi küçük harfle yazılmış 'get' (java yöntemi kuralı) ile başlamalı ve büyük harfle başlayan bir alan adıyla devam etmelidir. Örneğin alan adı 'maaş' olduğundan bu alanın alıcı yöntemi 'getSalary ()' şeklindedir.

  • Setterherhangi bir özelliğin yöntemi küçük harfli 'set' (java yöntemi kuralı) ile başlamalı, büyük harfle başlayan bir alan adı ve field olarak ayarlanacak bağımsız değişken değeri ile devam etmelidir. Örneğin, alan adı 'maaş' olduğundan bu alanın ayarlayıcı yöntemi 'setSalary (çift satış)' şeklindedir.

  • Boole özelliği için, doğru veya yanlış olup olmadığını kontrol etme yöntemidir. Örneğin Boolean özelliği 'boş', bu alanın is yöntemi 'isEmpty ()' şeklindedir.