Sobes.tech
Junior
304

Mis on ORM ja kuidas seda kasutatakse Java arenduses?

Vastus AI-lt

sobes.tech AI

Objekt-Relatsiooniline Kaart (ORM) on programmeerimistehnika, mis võimaldab andmete teisendamist mittesobivate tüübite süsteemide vahel, mida kasutatakse objekt-orienteeritud programmeerimiskeeltes ja relatsioonilistes andmebaasides. Põhimõtteliselt loob ORM "virtuaalse" objektiandmebaasi, mida saab koodist kasutada:

Java-s kasutatakse ORM-i järgmiselt:

  • Java objektide vastavus andmebaasi tabelitega: Iga klassi objekt vastab andmebaasi kirjele, ning objekti väljad vastavad tabeli veergudele.
  • Andmete töötlemise lihtsustamine: Arendajal ei ole vaja käsitsi kirjutada SQL-päringuid CRUD (Loo, Loe, Uuenda, Kustuta) operatsioonide jaoks. ORM raamistik genereerib SQL-i varjatult.
  • Tõhususe parandamine: ORM raamistikud sageli kasutavad vahemälu mehhanisme, mis võivad kiirendada andmebaasi operatsioone.
  • Ülemaailmse kasutamise parandamine: ORM raamistikuga rakendus muutub vähem sõltuvaks konkreetse andmebaasi tüübist, kuna raamistik suudab kohandada SQL-päringuid erinevatele dialektidele.
  • Testimise lihtsustamine: ORM võimaldab teha moodultestimist äriloogika ilma vajaduseta ühenduda reaalse andmebaasiga, kasutades näiteks H2 või HSQLDB in-memory režiimis.

Populaarsed ORM raamistikud Java-s:

  • Hibernate
  • JPA (Java Persistence API) – spetsifikatsioon, mida rakendavad Hibernate, EclipseLink ja teised.
  • MyBatis

Java-s ORM-i kasutamine hõlmab tavaliselt:

  1. Entiteetide (Entities) määratlemine: Java klasside loomine, mis on annotatsioonidega märgitud, et vastata andmebaasi tabelitele, näiteks JPA annotatsioonidega (@Entity, @Table, @Id, @Column).
  2. Konfiguratsiooni seadistamine: ORM raamistikku konfigureerida andmebaasi ühendamiseks ja käitumise parameetrite määramiseks.
  3. Operatsioonide teostamine: ORM API kasutamine, et teha CRUD operatsioone entiteetide peal.

Näide lihtsast entiteediklassist JPA kasutades:

// 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 // Märgib klassi JPA entiteediks
@Table(name = "products") // Seob klassi tabeliga "products"
public class Product {

    @Id // Määrab välja põhivõtmena
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Automaatne ID genereerimine
    private Long id;

    @Column(name = "name", nullable = false) // Seob välja veeruga "name", ei tohi olla null
    private String name;

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

    // Getterid ja setterid (lühendatud)

    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;
    }
}

Näide objekti salvestamisest JPA abil (EntityManageri kaudu):

// Näide teenuse kihist
// Eeldatakse, et entityManager on injekteeritud või muul viisil saadud

// Uue toote loomine
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(1200.00);

// Transaktsiooni alustamine
entityManager.getTransaction().begin();

// Toote salvestamine andmebaasi
entityManager.persist(newProduct);

// Transaktsiooni lõpetamine
entityManager.getTransaction().commit();

Seega, ORM lihtsustab oluliselt Java rakenduse suhtlust relatsioonilise andmebaasiga, võimaldades arendajal töötada andmetega objekti- ja orientatsioonis.