JPA (Java Persistence API) эмне?
sobes.tech AI
AIден жооп
JPA — Java колдонмолорунда маалыматтын туруктуулугун башкаруу үчүн API спецификациясы. Ал Java объекттерин реляциялык базаларга (же башка маалымат сактоо жайларына) жана тескерисинче картага түшүрүүнүн стандарттык жолун камсыздайт. JPA Java EE (азыркы Jakarta EE) платформасынын бир бөлүгү жана ошондой эле standalone колдонмолордо колдонулушу мүмкүн.
JPAнын негизги компоненттери:
- Entity:
@Entityаннотациясы менен белгиленген жөнөкөй Java класстары, базадагы маалыматтарды көрсөтөт. - EntityManager: Туруктуулук контексти менен иштөө үчүн интерфейс. Ал объекттерди издөө, түзүү, жаңылоо жана жок кылуу үчүн колдонулат.
- Persistence Context:
EntityManagerтарабынан башкарылуучу объекттердин топтому. Ал объекттердин өзгөрүүлөрүн базага синхрондоштуруу алдында көзөмөлдөйт. - JPQL (Java Persistence Query Language): SQLге окшош, бирок таблицалар жана саптардын ордуна объекттер жана алардын байланышы менен иштеген объект-бааздуу суроо тилі.
- Criteria API: Динамикалык суроолорду аткаруу үчүн объект-бааздуу API.
persistence.xml: Конфигурация файлы, ал бирдиктерди (persistence units) жана алардын касиеттерин (мисалы, базага туташуу маалыматы, картага түшүрүү стратегиясы) сүрөттөйт.
JPA конкреттүү ORM (Объект-Реляциялык Карта) ишке ашырылышын белгилебейт, бирок келишимдер жана APIлерди аныктайт. Бул спецификацияны ишке ашыруу үчүн ар кандай провайдерлер бар, алардын эң популярдуулары:
- Hibernate
- EclipseLink
- Apache OpenJPA
Мисал катары, бирдикти аныктоо:
// `products` таблицасында жазуу үчүн энтити
@Entity
// Базадагы таблицанын аты
@Table(name = "products")
public class Product {
// Биринчи ачкыч
@Id
// Биринчи ачкычты түзүү стратегиясы
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// `name` саптысы
private String name;
// `price` саптысы
private BigDecimal price;
// Конструкторлор, геттерлер жана сеттерлер
// ...
}
EntityManager колдонуу мисалы:
// `EntityManagerFactory` аркылуу EntityManager алуу
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// Транзакцияны баштоо
em.getTransaction().begin();
// Жаңы энтити түзүү
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Энтити базада сактоо
em.persist(newProduct);
// Биринчи ачкыч менен объектти табуу
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Табылган продукт: " + foundProduct.getName());
// JPQL суроо аткаруу
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// Транзакцияны ырастоо
em.getTransaction().commit();
} catch (Exception e) {
// Каталар болсо транзакцияны кайтаруу
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManagerди жабуу
em.close();
// EntityManagerFactoryди жабуу
emf.close();
}
JPAнин негизги максаты — базалар менен иштеген колдонмолорду өнүктүрүүнү жеңилдетүү, JDBC жана SQL менен иштөөдө төмөнкү деңгээлдеги деталдарды жогору жактан жапкан объект-бааздуу ыкманы камсыз кылуу. Бул коддун которулушун жеңилдетет жана анын конкреттүү базага көзкаранды болуусун азайтат.