Sobes.tech
Junior

Ի՞նչ է ORM-ը և ինչպես է այն օգտագործվում Java զարգացման մեջ։

sobes.tech AI

Պատասխան AI-ից

ORM (Օբյեկտ-Հարաբերական Մապինգ) - դա ծրագրավորման տեխնիկա է, որը օգտագործվում է տվյալների փոխակերպման համար անհամատեղելի տիպային համակարգերի միջև, որոնք կիրառվում են օբյեկտ-կողմնորոշված ծրագրավորման լեզուներում, և ռելացիոնալ տվյալների բազաներում: Իրականում, ORM-ը ստեղծում է «վիրտուալ» օբյեկտային տվյալների բազա, որը կարելի է օգտագործել կոդից:

Java-ում ORM-ը օգտագործվում է՝

  • Java օբյեկտների համադրումը տվյալների բազայի աղյուսակների հետ: Յուրաքանչյուր դասի օբյեկտ համընկնում է տվյալների բազայի աղյուսակի գրանցման հետ, իսկ օբյեկտի դաշտերը՝ աղյուսակի սյունակների:
  • Տվյալների աշխատանքի պարզեցում: Ծրագրավորողը չի պետք գրել SQL հարցումներ ձեռքով CRUD (Ստեղծել, Կարդալ, Թարմացնել, Ջնջել) գործողությունների համար: ORM-ֆրեյմվորկը գեներացնում է SQL-ը թաքնված կերպով:
  • Արդյունավետության բարձրացում: ORM-ֆրեյմվորկները հաճախ ունենում են կեշավորման մեխանիզմներ, որոնք կարող են արագացնել տվյալների բազայի հետ գործողությունները:
  • Տեղափոխելիության բարելավում: Օգտագործելով ORM-ֆրեյմվորկը, հավելվածը դառնում է ավելի քիչ կախված կոնկրետ տվյալների բազայից, քանի որ ֆրեյմվորկը կարող է հարմարեցնել SQL հարցումները տարբեր դիալեկտների:
  • Թեստավորման պարզեցում: ORM-ը թույլ է տալիս կատարել մոդուլային թեստավորում բիզնես-լոգիկայի՝ առանց իրական տվյալների բազայի միացման, օրինակ՝ օգտագործելով H2 կամ HSQLDB in-memory ռեժիմում:

Հայտնի ORM-ֆրեյմվորկների օրինակներ Java-ում՝

  • Hibernate
  • JPA (Java Persistence API) - դա ստանդարտ է, որը իրականացնում են Hibernate, EclipseLink և այլք:
  • MyBatis

Java-ում ORM-ի օգտագործումը սովորաբար ներառում է՝

  1. Նշել ենթակառուցվածքները (Entities): Java դասերի ստեղծում, որոնք նշված են՝ համադրելու համար տվյալների բազայի աղյուսակների հետ, օրինակ՝ օգտագործելով JPA նշումներ (@Entity, @Table, @Id, @Column):
  2. Կոնֆիգուրացիայի կարգավորում: ORM-ֆրեյմվորկի կոնֆիգուրացիա՝ տվյալների բազային կապի և վարքագծի պարամետրերի համար:
  3. Գործողությունների իրականացում: API-ի օգտագործում ORM-ֆրեյմվորկի՝ CRUD գործողությունների համար ենթակառուցվածքների վրա:

Նմուշ՝ պարզ ենթակառուցվածքի դաս՝ օգտագործելով JPA՝

// src/main/java/com/example/domain/Product.java
package com.example.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity // Հայտարարում է դասը որպես JPA ենթակառուցվածք
@Table(name = "products") // Համապատասխանում է դասին՝ աղյուսակին "products"
public class Product {

    @Id // Հաստատում է դաշտը որպես հիմնական բանալի
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Ավտոմատ ID սերնդում
    private Long id;

    @Column(name = "name", nullable = false) // Համապատասխանում է "name" սյունակին, չի կարող լինել null
    private String name;

    @Column(name = "price")
    private Double price;

    // Գеттерներ և սեթերներ (կարճեցված)

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

Նմուշ՝ օբյեկտի պահպանման՝ JPA-ի միջոցով (EntityManager-ի միջոցով)

// Օրինակ՝ ծառայության շերտում
// Կարծում ենք, entityManager-ը ներդրված է կամ ստացվում այլ կերպ

// Նոր ապրանքի ստեղծում
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(1200.00);

// Լիցենզիայի մեկնարկ
entityManager.getTransaction().begin();

// Ապրանքի պահպանում տվյալների բազայում
entityManager.persist(newProduct);

// Լիցենզիայի ավարտում
entityManager.getTransaction().commit();

Այսպիսով, ORM-ը զգալիորեն պարզեցնում է Java հավելվածի փոխազդեցությունը ռելացիոնալ տվյալների բազայի հետ, թույլ տալով ծրագրավորողին աշխատել տվյալների հետ օբյեկտ-կողմնորոշված ոճով։