Sobes.tech
Junior

JPA (Java Persistence API) nima?

sobes.tech AI

AIdan javob

JPA - bu Java ilovalarda ma'lumotlarni saqlash uchun API spetsifikatsiyasidir. U Java obyektlarini relatsion bazalar (yoki boshqa ma'lumotlar omborlari) bilan xaritaga solish va aksincha qilish uchun standart usul taqdim etadi. JPA Java EE (hozirda Jakarta EE) platformasining bir qismidir va mustaqil ilovalarda ham ishlatilishi mumkin.

JPA ning asosiy komponentlari:

  • Entity: Oddiy Java sinflari (POJO), @Entity anotatsiyasi bilan belgilangan, ma'lumotlarni bazada ifodalaydi.
  • EntityManager: Ma'lumotlarni saqlash kontekstiga kirish uchun interfeys. Entitilarni qidirish, yaratish, yangilash va o'chirish uchun ishlatiladi.
  • Persistence Context: EntityManager tomonidan boshqariladigan entitilar to'plami. Bu yerda entitilardagi o'zgarishlar kuzatiladi va ular bazaga sinxronlashtirilishidan oldin nazorat qilinadi.
  • JPQL (Java Persistence Query Language): Ob'ektga yo'naltirilgan so'rov tili, SQL ga o'xshash, lekin jadvallar va ustunlar o'rniga entitilar va ularning bog'lanishlari bilan ishlaydi.
  • Criteria API: Dinamik so'rovlarni bajarish uchun ob'ektga yo'naltirilgan API.
  • persistence.xml: Konfiguratsiya fayli, u yerda saqlash birliklari (persistence units) va ularning xususiyatlari (masalan, bog'lanish ma'lumotlari, xaritalash strategiyalari) tavsiflanadi.

JPA aniq ORM (Ob'ekt-Relatsion Xaritalash) amalga oshirish emas, balki shartlar va API ni belgilaydi. Bu spetsifikatsiyani amalga oshiradigan turli JPA ta'minotchilari mavjud, eng mashhurlari:

  • Hibernate
  • EclipseLink
  • Apache OpenJPA

Entitini belgilash misoli:

// `products` jadvalidagi yozuvni ifodalovchi entiti
@Entity
// Ma'lumotlar bazasidagi jadval nomi
@Table(name = "products")
public class Product {

    // Asosiy kalit
    @Id
    // Asosiy kalitni yaratish strategiyasi
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // `name` ustuni jadvalda
    private String name;

    // `price` ustuni jadvalda
    private BigDecimal price;

    // Konstruktorlar, getter va setterlar
    // ...
}

EntityManager dan foydalanish misoli:

// EntityManagerni EntityManagerFactory dan olish
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();

try {
    // Transaktsiya boshlash
    em.getTransaction().begin();

    // Yangi entitini yaratish
    Product newProduct = new Product();
    newProduct.setName("Laptop");
    newProduct.setPrice(new BigDecimal("1200.00"));

    // Entitini bazaga saqlash
    em.persist(newProduct);

    // Asosiy kalit bo'yicha entitini qidirish
    Product foundProduct = em.find(Product.class, 1L);
    System.out.println("Topilgan mahsulot: " + foundProduct.getName());

    // JPQL so'rovini bajarish
    List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
    for (Product p : allProducts) {
        System.out.println(p.getName());
    }

    // Transaktsiyani tasdiqlash
    em.getTransaction().commit();

} catch (Exception e) {
    // Xatolik yuz berganda transaktsiyani bekor qilish
    if (em.getTransaction().isActive()) {
        em.getTransaction().rollback();
    }
    e.printStackTrace();
} finally {
    // EntityManager ni yopish
    em.close();
    // EntityManagerFactory ni yopish
    emf.close();
}

JPA ning asosiy maqsadi, JDBC va SQL bilan ishlashning pastki tafsilotlarini abstraktsiyalash orqali, ob'ektga yo'naltirilgan yondashuv bilan ma'lumotlar bazasi bilan ishlashni soddalashtirishdir. Bu kodning ko'chiriluvchanligini oshiradi va uni ma'lum bir ma'lumotlar bazasiga bog'liqligini kamaytiradi.