Mapeamento objeto-relacional (ORM) | Explicação completa (Definição, uso, estrutura e prática)
Tags: braziliandevs, tutorial, detectalalogica, beginners
Published: 2023-07-14 19:31:34

Mapeamento objeto-relacional (ORM) | Explicação completa (Definição, uso, estrutura e prática)

# Introdução

Olá, meu nome é Daniela Barazarte e quero dar as boas-vindas a esta explicação completa sobre ORM (Object-Relational Mapping). Esta explicação será intuitiva e simples assim como todas as explicações que fazem parte do #DetectaLaLogica.

Se você preferir vídeos, aqui está um tutorial completo feito por mim no YouTube, é em espanhol, mas também tem legendas: https://www.youtube.com/watch?v=XIkDO9aPX_4

# <u>Teoria</u>
## Definição de cada palavra
**Mapeamento Relacional de Objeto (ORM)*
- Object (Object): em OOP, é uma instância de uma classe que possui atributos e métodos que permitem realizar determinadas ações e manipular dados.
- Relacional (Relacional): banco de dados relacional é uma estrutura de dados organizada em tabelas que são interligadas por relacionamentos.
- Mapeamento: é uma forma de tradução entre os objetos de uma linguagem de programação e as tabelas de um banco de dados relacional.

## Definição completa
É uma técnica de engenharia de software usada para conectar um banco de dados relacional e uma linguagem de programação orientada a objetos.

![ORM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6187jygz44jm5m5qc5lm.png)

## #DetectTheLogic
O ORM é chamado de Object-Relational Mapping (Mapeamento Object-Relacional) porque é uma técnica de mapeamento de objetos de uma linguagem de programação orientada a objetos com tabelas de um banco de dados relacional.

# <u>Usar</u>
## Para que
Em vez de escrever consultas SQL diretamente, os desenvolvedores podem interagir com objetos na linguagem de programação que representam os dados no banco de dados.

## Quando e onde
Ele é usado em uma ampla variedade de aplicativos de software, desde aplicativos da Web até aplicativos de desktop e móveis. É especialmente útil em aplicativos que lidam com grandes quantidades de dados e requerem acesso eficiente ao banco de dados.

## Como
- Hibernar: ORM para Java.
- Entity Framework: ORM para .NET/C#
- Django ORM: ORM padrão para Django.
- Sequela: ORM para Ruby.
- SQLAlchemy: ORM para Python.
- Eloquent: ORM para PHP que é utilizado no framework Laravel.


# <u>Praticar</u>
## Exercício
Você tem um aplicativo da web para uma loja online que vende eletrônicos. Você deve armazenar e gerenciar as informações de produtos, clientes, pedidos e transações financeiras usando uma linguagem OOP.

### **Método: SQL**
Preciso criar o banco de dados, depois criar a tabela do cliente e poder inserir dados lá... mas não é tão útil considerando que não posso fazer isso diretamente da página da web

```
-- Criar um cliente:
INSERT INTO clientes (Nome, E-mail)
VALUES('nome do cliente', 'e-mail do cliente');

-- Leia todos os clientes:
SELECIONE * DE clientes;

-- Editar um cliente
ATUALIZAR clientes
SET Nome = 'novo nome do cliente', Email = 'novo email do cliente'
WHERE Id = id do cliente;

-- Excluir um cliente
EXCLUIR DE clientes
WHERE Id = id do cliente;
```

### **Método: ORM**
Com Csharp (Linguagem de Programação) E Entity Framework (ORM), posso fazer com que os dados cheguem diretamente ao banco de dados da página da web. O banco de dados que usarei será MySql e precisarei de coisas diferentes, mas posso destacar o DbContext que geralmente é usado neste ORM
```
classe pública MyDbContext : DbContext
     {
         // Adiciona a linha de conexão ao banco de dados no MySQL
         string interna readonly connectionString = "server=localhost;port=3306;database=dbclients";
        
         substituição protegida void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
             // Declara o uso do MySQL e envia a linha de conexão e a versão do MySQL
             optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(ServerVersion.AutoDetect(connectionString)));
         }
         // Declara a tabela a ser utilizada
         public DbSet<Client> Clientes { get; definir; }
     }
```
Uma vez feita a conexão, vou precisar fazer as migrações e a partir daí posso começar a fazer determinadas funções diretamente do projeto.

Um exemplo é a função adicionar cliente:
```
// Função para adicionar um novo cliente ao banco de dados
static void AddClient(MyDbContext db)
{
     // Imprime uma mensagem para indicar que um novo cliente está sendo adicionado
     Console.WriteLine("\nAdicionando um novo cliente...");

     // Solicita ao usuário que insira o nome e o e-mail do cliente
     Console.Write("Nome: ");
     string nome = Console.ReadLine();
     Console.Write("E-mail: ");
     string email = Console.ReadLine();

     // Cria um novo objeto Cliente com os dados inseridos pelo usuário
     var novoCliente = novo Cliente
     {
         nome = nome,
         e-mail = e-mail
     };

     // Adiciona o novo objeto cliente ao banco de dados
     db.Clients.Add(newClient);

     //Salva as alterações no banco de dados
     db.SaveChanges();

     // Imprime uma mensagem para indicar que o novo cliente foi adicionado ao banco de dados
     Console.WriteLine($"Cliente adicionado: {newClient.Name} ({newClient.Email})");
}
```
E funções semelhantes podem ser executadas para leitura, edição e exclusão.

E assim, você pode interagir com um banco de dados diretamente da sua aplicação, mesmo sem usar a linguagem SQL.

# Importância
**ORM tem vários benefícios:**

- Abstração de banco de dados
- Redução do tempo de desenvolvimento
- Portabilidade de código
- Facilidade de manutenção
- Segurança para ataques de injeção
- Trabalhe de forma mais eficiente e rápida

# Até a próxima
(Lembre-se) #DetectaLaLógica: ORM é chamado de Object-Relational Mapping (Mapeamento Object-Relacional) porque é uma técnica de mapeamento de objetos a partir de uma linguagem de programação orientada a objetos com tabelas de banco de dados relacional.

Você pode praticar este tópico em meu repositório GitHub (código da linguagem C#): https://github.com/danielabarazarte/DetectaLaLogica

Muito obrigado por ler, se meu post te ajudou, você pode dar um LIKE para que mais pessoas possam ler, você também pode comentar qualquer dúvida ou sugestão que você tenha e eu agradeço se você me seguir para ver mais posts deste estilo, obrigada <3.