Explicando ORM (Object Relational Mapping)
Tags: webdev, database, programming, beginners
Published: 2023-11-07 13:15:35

Conforme você avança em seus estudos de programação, inevitavelmente chegará à parte de bancos de dados, e isso é óbvio. Em algum momento de sua aplicação, você precisará armazenar grandes quantidades de dados, e é aí que os tão famosos bancos de dados entrarão em cena.

Primeiro, vejamos abaixo como seria uma implementação de operação DEL em um banco de dados em nossa aplicação, sem usar uma ferramenta ORM.

**Exemplo simples de código sem ORM em Java**

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class DeleteStudent {
    public static void main(String[] args) {
        String url = "jdbc:sqlite:exemplo.db";
        int estudanteId = 1;

        try (Connection conn = DriverManager.getConnection(url);
             PreparedStatement pstmt = conn.prepareStatement("DELETE FROM estudantes WHERE id = ?")) {
            pstmt.setInt(1, estudanteId);
            int rowsDeleted = pstmt.executeUpdate();

            if (rowsDeleted > 0) {
                System.out.println("Estudante excluído com sucesso.");
            } else {
                System.out.println("Estudante não encontrado.");
            }
        } catch (Exception e) {
            System.err.println("Erro ao excluir o estudante: " + e.getMessage());
        }
    }
}

```
Neste código, estamos usando SQL para excluir um estudante do banco de dados. Perceba como o código ficou extenso e, para alguns, até mesmo complexo. Bem, esse é o desafio de programar sem usar o valioso ORM. Agora, deixe-me mostrar uma versão semelhante de código, mas usando uma ferramenta ORM.

**Exemplo simples de código com ORM em Java**

```
   public void delete(Estudante estudante) {
        this.filmRepositoryJPA.delete(estudante);
    }

```
Parece brincadeira, não é? Claro, esse código é apenas uma implementação simples, mas ambos seguem o mesmo objetivo.

**O problema que ORM veio resolver.**

Hoje em dia, é quase padrão que sua linguagem preferida seja Orientada a Objetos (OOP). Nesse paradigma, tudo é tratado como objeto, com suas propriedades e comportamentos. No entanto, quando se trata de bancos de dados, as coisas mudam, já que a maioria dos bancos de dados tem sua própria maneira de lidar com informações, usando tabelas, colunas e linhas. Você pode imaginar que essas duas formas distintas de trabalhar não se encaixam bem, certo?

Foi aí que o ORM entrou em cena, para facilitar essa relação, sem que o programador precise lidar com cada implementação. Dessa forma, o programador pode usar os próprios atributos da classe/objeto para recuperar os dados do banco.

**Exemplo de atualização do usuário por meio de seus atributos**

```
public void atualizarEstudante(Long id, String novoNome, int novaIdade) {
        Student student = studentRepository.findById(id).orElse(null);

        if (student != null) {
            student.setNome(novoNome);
            student.setIdade(novaIdade);
            studentRepository.save(student);
        }
    }
```

_É importante mencionar que, nestes exemplos, estou usando o Spring Boot com o Hibernate (nosso ORM em Java)._

**Conclusão**

Como podemos observar, o ORM veio para simplificar a vida do programador, eliminando a necessidade de passar horas adaptando sua aplicação para funcionar em diferentes paradigmas. Claro que há muito mais a ser explorado sobre essa incrível ferramenta, e recomendo que você leia a documentação específica de cada implementação em sua linguagem favorita. Deixo aqui o link para a documentação do Hibernate com Java, que foi usado em nossos exemplos.
[Hibernate](https://hibernate.org/orm/documentation/6.3/)

Muito obrigado por ler até aqui!