Yeni başlayanların APP hakkında bilmesi gereken beş şey
Java Persistence (JPA) API’si ve uygulamaları hakkında iyi bir çalışma bilgisi, Java geliştiricileri arasında en çok aranan becerilerden biri olmaya devam etmektedir. Bu nedenle, JPA spesifikasyonunu kullanarak bir kalıcılık katmanının nasıl uygulanacağını gösteren birçok blog makalesi, kitap ve kursun olması şaşırtıcı değildir.
Ancak yeni gelenler, popülaritesine rağmen, muhtemelen JPA’nın neden bu kadar sık kullanıldığını ve bu konuda bilinmesi gerekenleri merak ediyorlar. Bu yüzden, bir geliştiricinin JPA hakkında bilmesi gereken ilk beş şeye bir göz atacağım.
1. Basit çizimler neredeyse hiç açıklama gerektirmez
En bariz olanla başlayalım: JPA özelliği, ilişkisel bir veritabanındaki tablolar ile Java sınıfları arasında nesne-ilişkisel bir eşleme tanımlar. Güzel olan şey, JPA’nın bu eşlemeyi çok basit hale getirmesidir. Çoğu zaman bir sınıfın yalnızca bir sınıfla başlaması gerekir. @Varlık– Ek Açıklama sağlanacaktır. Tüm öznitelikleri daha sonra otomatik olarak aynı ada sahip veritabanı sütunlarına eşlenir.
İşte böyle temel bir haritalamanın bir örneği:
@Entity
public class Professor {
@Id
private Long id;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
}
the Profesörsınıf, bir veritabanı tablosunda JPA aracılığıyla adlandırılır Profesör ve sütunlar yani, ilk adı Ve Soyadı Resimde. Bu sınıfın illüstrasyonunu YouTube’da bulunan “Yeni Başlayanlar İçin JPA” kursumun örnek dersinde ayrıntılı olarak anlatıyorum:
Ve yalnızca basit öznitelikleri veritabanı sütunlarına eşlemekle kalmaz, aynı zamanda varlıklar arasındaki ilişkileri de modelleyebilirsiniz. Bu, yabancı anahtar sütunlarının ve tablo modeli ilişki tablolarının, alıcı ve ayarlayıcı yöntemleriyle varlık öznitelikleri olarak temsil edilmesini sağlar. Bu nitelikler daha sonra diğer herhangi bir varlık özelliği gibi kullanılabilir. Kullanılan JPA uygulaması, varlık başlatma sırasında veya ilk kez kullanıldığında gerekli veri kümelerinin yüklenmesini sağlar.
Aşağıdaki örnek, aşağıdakiler arasındaki tipik bir çoktan bire ilişkinin eşlemesini gösterir: Profesör– ve kursMasa. Profesör sınıf özniteliği ilişkiyi modeller ve JPA uygulaması gerekli okuma ve yazma işlemlerini gerçekleştirmekle ilgilenir:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "course_generator")
@SequenceGenerator(name = "course_generator", sequenceName = "course_seq")
private Long id;
private String name;
private LocalDate startDate;
private LocalDate endDate;
@ManyToOne
private Professor professor;
...
}
2. APP, uygulama gerektirir
JPA, yalnızca bir dizi arabirimi ve bunların işlevlerini tanımlayan bir özelliktir. Bu, uygulamanızı uygulamak için spesifikasyonu kullanabileceğiniz, ancak onu çalıştırmak için bir uygulama eklemeniz gerektiği anlamına gelir. İyi bilinen iki JPA uygulaması, spesifikasyonun referans uygulaması olan EclipseLink ve muhtemelen en popüler JPA uygulaması olan Hibernate’dir.
3. APP, soyutlamalar ve dolaylı yollar sunar
JPA’nın Java sınıflarını veritabanı tablolarıyla ilişkilendirdiğini ve bu sınıflar arasındaki ilişkileri de içerdiğini bu makalenin başında açıklamıştım. Bu haritalama açıkça bir soyutlamaya yol açar. Basit bir öznitelik ile bir veritabanı sütunu arasındaki soyutlama düzeyi oldukça düşük olabilir, ancak ilişkiler için önemli ölçüde daha yüksektir. Bu durumda, JPA uygulamasının yalnızca veritabanı sütununun JDBC türü ile varlık özniteliğinin Java türü arasında tür dönüştürmesi gerçekleştirmesi değil, aynı zamanda ilişkili kayıtları almak için ek sorguları işlemesi gerekir.
Bu nedenle, her geliştiricinin haritalama ve sonuçları hakkında kapsamlı bir anlayışa sahip olması son derece önemlidir. Aksi takdirde, JPA uygulamanız bu ilişkileri verimsiz bir şekilde ele alacak ve uygulamanız ciddi performans sorunları yaşayacaktır. Bu nedenle, “Yeni Başlayanlar İçin Çevrimiçi JPA Eğitimi”min dört dersinde, farklı türdeki ilişkilerin resimlerini ve bunların getirme olarak bilinen yükleme davranışlarını ele alıyorum.
Öznitelik eşlemeleri aracılığıyla soyutlamaya ek olarak JPA, karmaşık bir yaşam döngüsü modeline dayalı olarak gerekli ekleme, güncelleme ve kaldırma işlemlerini de tetikler. İyi olan şey, bu işlemlerin herhangi bir SQL ifadesi yazmanızı gerektirmemesidir. Ancak aynı zamanda, SQL deyimi ve yürütüldüğü zaman üzerindeki kontrolü kaybedersiniz.
SQL ifadelerinin otomatik olarak oluşturulması ve yürütülmesi, iş mantığının uygulanmasını büyük ölçüde basitleştirir ve geliştirici üretkenliğini artırır. Ancak SQL ifadelerinin ne zaman yürütüleceğini tahmin etmeyi de zorlaştırır. Bu nedenle, yaşam döngüsü modelini ve bunun SQL ifadelerinin yürütülmesini nasıl etkilediğini tam olarak anlamanız gerekir.
4. Henüz ilişkisel tablo modellerini anlamadınız
JPA, veritabanı erişimini soyutlar ve bir dizi açıklama ve arabirimin arkasına gizler. Ancak bu, veritabanını yok sayabileceğiniz anlamına gelmez. Doğrudan bir tablo modeli üzerinde çalışmıyor olsanız bile, ilişkisel tablo modellerinin olanaklarını ve sınırlamalarını göz önünde bulundurmanız gerekir. Bunu yapmazsanız, er ya da geç bu performans sorunlarına yol açacaktır.
Ayrıca, varlıkların gösterilen veritabanı tablolarına mümkün olduğunca benzer olduğundan emin olmalısınız. Bu, JPA uygulamasının hızlı ve verimli nesne ilişkisel eşleme sağlayabilmesini sağlar.
5. Hâlâ SQL okuyabilmeniz gerekiyor
Ayrıca, veritabanının hala SQL deyimlerini yürüttüğünü de dikkate almanız gerekir. JPA’yı kullanmak, bu talimatların birçoğunu kendi başınıza yazma gereksinimini ortadan kaldırır, ancak yine de bunları okuyup anlayabilmeniz gerekir. Bu, APP uygulamasının veri tabanı ile etkileşimini anlamak ve veri tabanına verimli bir bağlantı uygulamak için gereklidir.
Yürütülen SQL deyimlerini kontrol edebilmek için öncelikle JPA uygulaması tarafından kaydedilmeleri gerekir. Gereken yapılandırma, belirli JPA uygulamasına bağlıdır. Aşağıdaki örnekte Hazırda Bekletme için bir yapılandırma gösteriyorum:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
log4j.rootLogger=info, stdout
# basic log level for all messages
log4j.logger.org.hibernate=info
# SQL statements and parameters
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace
Bu yapılandırma ile Hibernate, yürütülen tüm SQL INSERT, UPDATE ve DELETE deyimlerini günlük dosyasına yazar. Bu şekilde Hibernate tarafından tam olarak ne zaman ve hangi talimatların yürütüldüğünü görebilirsiniz.
19:13:35,772 DEBUG [org.hibernate.SQL] -
select
professor0_.id as id1_1_0_,
professor0_.firstName as firstNam2_1_0_,
professor0_.lastName as lastName3_1_0_
from
Professor professor0_
where
professor0_.id=?
19:13:35,773 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [BIGINT] -[1]
19:13:35,774 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([firstNam2_1_0_] : [VARCHAR]) - [Jane]
19:13:35,774 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([lastName3_1_0_] : [VARCHAR]) - [Doe]
19:13:35,775 DEBUG [org.hibernate.SQL] -
update
Course
set
endDate=?,
name=?,
professor_id=?,
startDate=?
where
id=?
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [DATE] - [2019-05-31]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [2] as [VARCHAR] - [Software Development 1]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [3] as [BIGINT] - [1]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [4] as [DATE] - [2018-08-15]
19:13:35,777 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [5] as [BIGINT] - [1]
Kursumda JPA hakkında daha fazlasını okuyun
İlk bakışta, genellikle JPA ile tam bir kalıcılık katmanı uygulamak için yalnızca birkaç açıklamanın gerekli olduğu görülüyor. Bununla birlikte, pratik uygulama sırasında, belirtimi kullanmanın beklenenden çok daha karmaşık olduğu ve temel kavramın iyi bir şekilde anlaşılmasını gerektirdiği hemen keşfedilir.
Çevrimiçi kursum “Yeni Başlayanlar için JPA” ile bu bilgiyi edinmenin hızlı ve kolay bir yolunu sunuyorum. Kısa video dersleri ve eşleştirme etkinlikleri ile katılımcılar, JPA spesifikasyonuna dayalı bir kalıcılık katmanı oluşturmayı ve yaygın hatalardan nasıl kaçınılacağını hızla öğrenirler.
İkinciyi tanıtmak için. Kursun revize edilmiş versiyonu, 15 Mart’a kadar indirimli bir fiyatla https://thinks-on-java.org/jpa-for-beginners/ adresinde mevcuttur.
()
Haberin Sonu