ORM para Java: comparação de Hibernate, MyBatis e JPA com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

ORM para Java: Comparação e exemplos



ORM (Object-Relational Mapping) — é uma tecnologia que conecta o modelo orientado a objetos do Java com bancos de dados relacionais. Ela elimina a necessidade de escrever código SQL repetitivo e permite trabalhar com dados como objetos Java comuns. Em Java, as três abordagens mais populares são: Hibernate (ORM completo), MyBatis (mapeador SQL) e JPA (padrão Java). Neste artigo, vamos compará-las com exemplos práticos.



1. JPA (Java Persistence API)

JPA — é uma especificação (padrão), não uma implementação concreta. A implementação mais popular é o Hibernate, mas existem outras (EclipseLink, OpenJPA). JPA fornece anotações para mapeamento de entidades e suporta JPQL (Java Persistence Query Language).



Exemplo de entidade JPA:

import javax.persistence.*;

@Entity@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

@Column(name = "username", nullable = false, length = 50) private String username;

@Column(name = "email") private String email;

// getters e setters public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}


Exemplo de salvamento via EntityManager:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");EntityManager em = emf.createEntityManager();

em.getTransaction().begin();User user = new User();user.setUsername("ivan");user.setEmail("ivan@example.com");em.persist(user);em.getTransaction().commit();

em.close();emf.close();


2. Hibernate

Hibernate — é o ORM mais maduro e funcional para Java. Ele implementa completamente o JPA, mas também possui extensões próprias. Hibernate gera SQL automaticamente, gerencia cache, suporta lazy loading e operações em cascata.



Exemplo de mapeamento com Hibernate (usando anotações JPA):

import org.hibernate.annotations.Cache;import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity@Table(name = "orders")@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)public class Order { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "order_seq") @SequenceGenerator(name = "order_seq", sequenceName = "order_sequence", allocationSize = 1) private Long id;

@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user;

@Column(name = "total_amount") private Double totalAmount;

// getters e setters}


Exemplo de consulta via Hibernate Criteria API:

Session session = sessionFactory.openSession();CriteriaBuilder builder = session.getCriteriaBuilder();CriteriaQuery<User> query = builder.createQuery(User.class);Root<User> root = query.from(User.class);query.select(root).where(builder.equal(root.get("username"), "ivan"));

List<User> users = session.createQuery(query).getResultList();session.close();


3. MyBatis

MyBatis — não é um ORM completo, mas sim um Mapeador SQL. Ele não gera SQL automaticamente, mas fornece um mecanismo flexível para escrever consultas SQL próprias com mapeamento de resultados para objetos Java. MyBatis é ideal quando é necessário controle total sobre o SQL e desempenho.



Exemplo de mapeamento em XML (UserMapper.xml):

<mapper namespace="com.example.mapper.UserMapper">    <select id="selectUser" resultType="User">\                    

Recommendations