Sobes.tech
Junior

O que é ORM e como é utilizada no desenvolvimento em Java?

sobes.tech IA

Resposta da IA

O ORM (Mapeamento Objeto-Relacional) é uma técnica de programação para transformar dados entre sistemas de tipos incompatíveis utilizados em linguagens de programação orientadas a objetos e bases de dados relacionais. Em essência, o ORM cria uma base de dados de objetos "virtual" que pode ser usada a partir do código.

Em Java, o ORM é utilizado para:

  • Mapear objetos Java para tabelas de bases de dados: Cada objeto de classe na aplicação é mapeado para um registo na tabela da base de dados, e os campos do objeto para colunas da tabela.
  • Simplificar o trabalho com dados: O desenvolvedor não precisa de escrever consultas SQL manualmente para realizar operações CRUD (Criar, Ler, Atualizar, Apagar). O framework ORM gera SQL por trás dos panos.
  • Melhorar o desempenho: Os frameworks ORM frequentemente têm mecanismos de cache que podem acelerar as operações com a base de dados.
  • Melhorar a portabilidade: Ao usar um framework ORM, a aplicação torna-se menos dependente de uma base de dados específica, pois o framework pode adaptar as consultas SQL a diferentes dialetos.
  • Facilitar os testes: ORM permite realizar testes unitários da lógica de negócio sem necessidade de se conectar a uma base de dados real, usando por exemplo H2 ou HSQLDB em modo memória.

Exemplos de frameworks ORM populares em Java:

  • Hibernate
  • JPA (Java Persistence API) - especificação implementada por Hibernate, EclipseLink e outros.
  • MyBatis

O uso de ORM em Java geralmente inclui:

  1. Definir entidades: Criar classes Java anotadas para mapear com as tabelas da base de dados, por exemplo, usando anotações JPA (@Entity, @Table, @Id, @Column).
  2. Configurar: Configurar o framework ORM para conectar à base de dados e definir parâmetros de comportamento.
  3. Realizar operações: Usar a API do framework ORM para realizar operações CRUD sobre as entidades.

Exemplo de uma classe de entidade simples usando 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 // Declara a classe como entidade JPA
@Table(name = "products") // Mapeia a classe à tabela "products"
public class Product {

    @Id // Define o campo como chave primária
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Geração automática do ID
    private Long id;

    @Column(name = "name", nullable = false) // Mapeia o campo à coluna "name", não pode ser nulo
    private String name;

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

    // Getters e setters (omitidos por brevidade)

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

Exemplo de guardar um objeto usando JPA (via EntityManager):

// Código na camada de serviço
// Assume-se que o entityManager está injetado ou obtido de outra forma

// Criar um novo produto
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(1200.00);

// Iniciar transação
entityManager.getTransaction().begin();

// Salvar o produto na base de dados
entityManager.persist(newProduct);

// Finalizar transação
entityManager.getTransaction().commit();

Assim, o ORM simplifica significativamente a interação de uma aplicação Java com uma base de dados relacional, permitindo ao desenvolvedor trabalhar com dados em estilo orientado a objetos.