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:
- 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). - Configurar: Configurar o framework ORM para conectar à base de dados e definir parâmetros de comportamento.
- 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.