Sobes.tech
Junior

Čo je ORM a ako sa používa vo vývoji v Jave?

sobes.tech AI

Odpoveď od AI

Objektovo-relačné mapovanie (ORM) je technika programovania na prevod dát medzi nekompatibilnými systémami typov, používaná v objektovo orientovaných programovacích jazykoch a relačných databázach. V podstate ORM vytvára "virtuálnu" objektovú databázu, ktorú možno použiť z kódu.

V Jave sa ORM používa na:

  • Mapovanie Java objektov na tabuľky databázy: Každý objekt triedy je mapovaný na záznam v tabuľke databázy a polia objektu na stĺpce.
  • Zjednodušenie práce s dátami: Vývojár nemusí ručne písať SQL dotazy pre CRUD operácie (Create, Read, Update, Delete). Framework ORM generuje SQL na pozadí.
  • Zvýšenie výkonu: Frameworky ORM často obsahujú mechanizmy cache, ktoré môžu zrýchliť operácie s databázou.
  • Zlepšenie prenositeľnosti: Použitím ORM sa aplikácia stáva menej závislou od konkrétnej databázy, pretože framework môže prispôsobiť SQL dotazy rôznym dialektom.
  • Zjednodušenie testovania: ORM umožňuje vykonávanie modulárnych testov podnikovej logiky bez nutnosti pripojenia k reálnej databáze, napríklad pomocou H2 alebo HSQLDB v režime in-memory.

Príklady populárnych ORM frameworkov v Jave:

  • Hibernate
  • JPA (Java Persistence API) - špecifikácia, ktorú implementujú Hibernate, EclipseLink a ďalší.
  • MyBatis

Použitie ORM v Jave zvyčajne zahŕňa:

  1. Definovanie entít (Entities): Vytvorenie Java tried, anotované na mapovanie na tabuľky databázy (@Entity, @Table, @Id, @Column).
  2. Konfigurácia: Konfigurácia ORM frameworku na pripojenie k databáze a definovanie parametrov.
  3. Vykonávanie operácií: Použitie API ORM frameworku na vykonávanie CRUD operácií nad entitami.

Príklad jednoduchej triedy entity s použitím 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 // Označuje triedu ako JPA entitu
@Table(name = "products") // Mapuje triedu na tabuľu "products"
public class Product {

    @Id // Definuje pole ako primárny kľúč
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Automatické generovanie ID
    private Long id;

    @Column(name = "name", nullable = false) // Mapuje pole na stĺpec "name", nemôže byť null
    private String name;

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

    // Gettery a settery (pre stručnosť vynechané)

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

Príklad na uloženie objektu pomocou JPA (cez EntityManager):

// Príklad kódu v servisnej vrstve
// Predpokladá sa, že entityManager je injektovaný alebo získaný iným spôsobom

// Vytvorenie nového produktu
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(1200.00);

// Začatie transakcie
entityManager.getTransaction().begin();

// Uloženie produktu do databázy
entityManager.persist(newProduct);

// Ukončenie transakcie
entityManager.getTransaction().commit();

Týmto spôsobom ORM výrazne zjednodušuje interakciu Java aplikácie s relačnou databázou, umožňujúc vývojárovi pracovať s dátami v objektovo orientovanom štýle.