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),
@Entityanotatsiyasi 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:
EntityManagertomonidan 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.