JPA (Java Persistence API) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
JPA - Java tətbiqlərində məlumatların davamlılığını idarə etmək üçün API spesifikasiyasıdır. Bu, Java obyektlərinin əlaqəli verilənlər bazalarına (və ya digər məlumat saxlama yerlərinə) və əksinə xətti bir şəkildə göstərilməsi üçün standart bir üsul təqdim edir. JPA, Java EE (indiki Jakarta EE) platformasının bir hissəsidir və ayrıca müstəqil tətbiqlərdə də istifadə oluna bilər.
JPA-nın əsas komponentləri:
- Entity:
@Entityannotasiyası ilə işarələnmiş adi Java sinifləri (POJO), verilənlər bazasında məlumatları təmsil edir. - EntityManager: Davamlılıq kontekstinə qarşı əlaqə üçün interfeys. O, obyektlərin axtarışı, yaradılması, yenilənməsi və silinməsi üçün istifadə olunur.
- Persistence Context:
EntityManagertərəfindən idarə olunan obyektlər toplusu. Bu, verilənlər bazası ilə sinxronizasiya edilmədən əvvəl obyekt dəyişikliklərini izləyir. - JPQL (Java Persistence Query Language): SQL-ə bənzər obyekt yönümlü sorğu dilidir, lakin cədvəllər və sütunlar yerinə obyektlər və onların əlaqələri ilə işləyir.
- Criteria API: Dinamik sorğular yerinə yetirmək üçün obyekt yönümlü API.
persistence.xml: Konfiqurasiya faylı, davamlılıq vahidlərini (persistence units) və onların xüsusiyyətlərini (məsələn, verilənlər bazasına qoşulma məlumatları, xəritələmə strategiyaları) təsvir edir.
JPA, ORM (Obyekt-Əlaqəli Xəritəçəkmə) üçün konkret bir tətbiq deyil, sadəcə müqavilələr və API-ni müəyyən edir. Bu spesifikasiyanı həyata keçirən müxtəlif təminatçılar mövcuddur, ən məşhurları:
- Hibernate
- EclipseLink
- Apache OpenJPA
Varlıq təyin etmənin nümunəsi:
// `products` cədvəlində qeyd edən varlıq
@Entity
// Verilənlər bazasındakı cədvəlin adı
@Table(name = "products")
public class Product {
// Birincil açar
@Id
// Birincil açarın nəsil strategiyası
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// `name` sütunu
private String name;
// `price` sütunu
private BigDecimal price;
// Konstruktorlar, getter və setterlər
// ...
}
EntityManager istifadə nümunəsi:
// `EntityManagerFactory`-dən EntityManager alınması
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Əməliyyatların başlanması
em.getTransaction().begin();
// Yeni varlıq yaradılması
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Varlığın verilənlər bazasında saxlanması
em.persist(newProduct);
// Birincil açar ilə varlığın axtarışı
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Tapılan məhsul: " + foundProduct.getName());
// JPQL sorğusu yerinə yetirmək
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Əməliyyatların təsdiqi
em.getTransaction().commit();
} catch (Exception e) {
// Xəta baş verdikdə əməliyyatın ləğvi
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManager-in bağlanması
em.close();
// EntityManagerFactory-nin bağlanması
emf.close();
}
JPA-nın əsas məqsədi, verilənlər bazası ilə işləyən tətbiqlərin inkişafını sadələşdirmək, JDBC və SQL ilə işləmənin aşağı səviyyəli detallardan soyutlanması ilə obyekt yönümlü yanaşma təqdim etməkdir. Bu, kodun köçürülməsini asanlaşdırır və onun müəyyən verilənlər bazasına bağlılığını azaldır.