JPA'da yeni başlayan olarak bilmeniz gereken beş şey

Portakalkafa

Global Mod
Global Mod


  1. JPA'da yeni başlayan olarak bilmeniz gereken beş şey

Kalıcılık Java (JPA) ve uygulamalarının API'sı hakkında iyi bir bilgi, Java'nın geliştiricileri arasında hala en çok aranan becerilerden biridir. Bu nedenle, JPA spesifikasyonlarıyla bir kalıcılığın nasıl uygulanabileceğini gösteren birçok blog, kitap ve kurs makalesi olması şaşırtıcı değildir.

Ancak tüm popülerliğe rağmen, yeni gelenler muhtemelen JPA'nın neden bu kadar sık kullanıldığını ve bu konuda ne bilmeniz gerektiğini merak ediyor. Bu nedenle, JPA geliştiricisi olarak bilmeniz gereken en önemli beş şeye bir göz atın.

1. Basit çizimler, ek açıklamalar gerektirmez


En belirgin olanla başlayalım: JPA spesifikasyonu, ilişkisel bir veritabanındaki tablolar ile Java sınıfları arasındaki nesnelere bağlı bir illüstrasyon tanımlar. Grandiose şey, JPA'nın bu ödevi çok basitleştirmesidir. Çok sık bir sınıfın sadece biriyle olması gerekir @Entity-Henat sağlanabilir. Tüm özellikleriniz daha sonra aynı ada sahip veritabanı sütunlarında otomatik olarak görüntülenir.

İşte bu temel eşleme ö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;
}
}


. profesörSınıf, JPA tarafından adla bir veritabanı tablosunda yapılır profesör ve sütunlar İD,, vaftiz adı VE soyadı gösterilen. YouTube'da bulunan “Yeni Başlayanlar için JPA” kursumun incelenmesinde bu sınıfın resmini ayrıntılı olarak açıklıyorum:



Ve sadece veritabanının sütunlarındaki basit öznitelikleri haritalamakla kalmaz, aynı zamanda varlıklar arasındaki ilişkileri de modelleyebilirsiniz. Bu şekilde, tablo modelinin harici tuşları ve ilişki tabloları, ıslak yöntemlere ve ayarlayıcılara sahip varlıklara sahip varlıklar olarak görüntülenebilir. Bu özellikler bu nedenle varlığın diğer özellikleri olarak kullanılabilir. JPA uygulaması, istenen veri kayıtlarının varlığın başlatılması sırasında veya ilk kez kullandıklarında yüklendiğini garanti eder.

Aşağıdaki örnekte, tipik bir çok yönlü ilişkinin eşleştirilmesini göstermektedir. profesör– ve MahkemeTabel. Profesör sınıfının niteliği, JPA'nın gerekli okuma ve yazma operasyonlarının raporunu ve uygulanmasını modellemiştir:

@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. JPA uygulama gerektirir


JPA sadece bir dizi arayüzü ve işlevlerini tanımlayan bir spesifiktir. Bu, spesifikasyonları uygulamayı uygulamak için kullanmanın mümkün olduğu anlamına gelir, ancak bu bir uygulamayı uygulamak için eklenmelidir. İyi bilinen iki JPA uygulaması EclipSelink, spesifikasyonların referans uygulaması ve hazırda bekletme, muhtemelen en popüler JPA uygulamasıdır.

3. JPA soyutlamaları ve dolayları sunar


Bu makalenin başında JPA Java sınıflarının veritabanı tablolarını temsil ettiğini ve bunun da bu sınıflar arasındaki ilişkileri içerdiğini açıkladım. Bu rakam açıkça bir soyutlamaya yol açar. Basit bir özellik ve bir veritabanı sütunu arasındaki soyutlama derecesi oldukça düşük olabilir, ancak ilişkilerde önemli ölçüde daha yüksektir. Bu nedenle JPA uygulaması, türün veritabanı sütununun JDBC türü ile ekli varlığın Java türü arasındaki dönüşümünü gerçekleştirmemelidir, ancak aynı zamanda ilişkili verilerin kayıtlarına erişmek için daha fazla sorguyu yönetmelidir.

Bu nedenle, her geliştiricinin eşleme ve etkilerini içermesi son derece önemlidir. Aksi takdirde, JPA'nın uygulaması bu ilişkilerle ilgilenecektir ve uygulama ciddi performans sorunlarından muzdarip olacaktır. Bu nedenle, “Yeni Başlayanlar için Çevrimiçi Eğitim için JPA” nın dört dersinde, bir iyileşme olarak gösterilen farklı ilişki türlerinin görüntüleri ve yük davranışları ile ilgileniyorum.

Özniteliklerin atamaları yoluyla soyutlamaya ek olarak, JPA ayrıca karmaşık bir yaşam döngüsü modeline dayalı gerekli ekleme, güncelleme ve mesafe işlemlerini de tetikler. İyi olan şey, bu işlemler için SQL talimatlarının yazılmamasıdır. Ancak aynı zamanda SQL eğitiminin kontrolünü ve infaz zamanını kaybedersiniz.

SQL talimatlarının oluşturulması ve otomatik olarak yürütülmesi, kurumsal mantığın uygulanmasını ve geliştiricilerin verimliliğini artırmayı çok kolaylaştırır. Ancak SQL talimatlarının ne zaman gerçekleştirildiğini tahmin etmeyi de zorlaştırır. Bu nedenle, SQL talimatlarının yürütülmesinde yaşam döngüsü modelinin ve etkilerinin iyi bir şekilde anlaşılması gerekmektedir.

4. Hala ilişkisel tablo modellerini anlamanız gerekiyor


JPA, veritabanı erişimini özetler ve bir dizi ek açıklama ve arayüzün arkasına gizler. Ancak bu, veritabanını görmezden gelebileceğiniz anlamına gelmez. Doğrudan bir masa modeli üzerinde çalışmasanız bile, ilişkisel tablo modellerinin olasılıkları ve sınırları henüz dikkate alınmalıdır. Bunu yapmazsanız, er ya da geç 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 olunmalıdır. Bu, JPA'nın uygulanmasının nesnel nesnelerin hızlı ve verimli bir eşlemesini sağlayabileceğini garanti eder.

5. Hala SQL okuyabilmelisiniz


Veritabanının SQL talimatlarını gerçekleştirmeye devam ettiği de dikkate alınmalıdır. JPA'yı kullanarak, bu talimatların birçoğunun artık Sun tarafından yazılması gerekmez, ancak yine de okuyabilmeli ve anlayabilmelisiniz. Bu, JPA uygulamasının veritabanı ile etkileşimini anlamak ve verimli bir veritabanı bağlantısı uygulamak için gereklidir.

Gerçekleştirilen SQL talimatlarını kontrol etmek için bunlar ilk olarak JPA uygulaması tarafından kaydedilmelidir. İstenen yapılandırma ilgili 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, kayıt dosyasında yapılan tüm SQL ekleme talimatlarını, güncellemeyi ve silme işlemlerini yazar. Böylece, ne zaman ve kış uykusunu gerçekleştirdiğini tam olarak 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 fazla bilgi


İlk bakışta, tam bir kalıcılık seviyesi uygulamak için JPA ile sadece birkaç ek açıklamaya ihtiyacınız olduğu görülmektedir. Pratik uygulama sırasında, spesifikasyonların kullanımının beklenenden çok daha karmaşık olduğu ve temel kavramın iyi bir şekilde anlaşılmasını gerektirdiği hızlı bir şekilde keşfedilmiştir.

“Yeni Başlayanlar için JPA” çevrimiçi kursumla bu bilgiyi öğrenmek için basit ve hızlı bir yol sunuyorum. Kısa gösterimler video ve yeterli görevlerle katılımcılar kısa sürede JPA spesifikasyonlarına dayalı bir kalıcılık düzeyi oluşturmak ve sık sık doğrulama hatalarını önlemek için öğrenirler.

İkincisinin tanıtımı için. Kursun dergi versiyonu 15 Mart'a kadar https://thaatchs-on-java.org/jpa-for-beginners/ adresindeki indirimli bir fiyata sunulmaktadır.


()
 
Üst