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:
- Entiteetide (Entities) määratlemine: Java klasside loomine, mis on annotatsioonidega märgitud, et vastata andmebaasi tabelitele, näiteks JPA annotatsioonidega (
@Entity,@Table,@Id,@Column). - Konfiguratsiooni seadistamine: ORM raamistikku konfigureerida andmebaasi ühendamiseks ja käitumise parameetrite määramiseks.
- 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.