Object-Relational Mapping (ORM)| Explicación Completa (Definición, uso, estructura y práctica)
Tags: programming, database, tutorial, detectalalogica
Published: 2023-07-14 19:27:09

Object-Relational Mapping (ORM)| Explicación Completa (Definición, uso, estructura y práctica)

# Introducción

Hola buenas, mi nombre es Daniela Barazarte y te quiero dar la bienvenida a esta explicación completa sobre ORM (Object-Relational Mapping). Esta explicación será intuitiva y simple así como todas las explicaciones que forman parte de #DetectaLaLogica.

Si prefieres los videos, aquí tienes un tutorial completo hecho por mí en YouTube, está en español pero también tiene subtítulos: https://www.youtube.com/watch?v=XIkDO9aPX_4

# <u>Teoría</u>
## Definición de cada palabra
**Object-Relational Mapping (ORM)*
- Object (Objeto): en POO, es una instancia de una clase que tiene atributos y métodos que le permiten realizar ciertas acciones y manipular datos.
- Relational (Relacional): base de datos relacional es una estructura de datos organizada en tablas que están interconectadas mediante relaciones.
- Mapping (Mapeo): es una forma de traducir entre los objetos de un lenguaje de programación y las tablas de una base de datos relacional.

## Definición completa
Es una técnica en ingeniería de software que se utiliza para conectar una base de datos relacional y un lenguaje de programación orientado a objetos.

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

## #DetectaLaLógica
ORM se dice Object-Relational Mapping (Mapeo Objeto-Relacional) pues es una técnica de mapear objetos de un lenguaje de programación orientado a objetos con tablas de una base de datos relacional.

# <u>Uso</u>
## Para qué
En lugar de tener que escribir consultas SQL directamente, los desarrolladores pueden interactuar con objetos en el lenguaje de programación que representan los datos en la base de datos

## Cuando y donde
Se utiliza en una amplia variedad de aplicaciones de software, desde aplicaciones web hasta aplicaciones de escritorio y móviles. Es especialmente útil en aplicaciones que manejan grandes cantidades de datos y que requieren un acceso eficiente a la base de datos.

## Cómo
- Hibernate: ORM para Java. 
- Entity Framework: ORM para .NET/C#
- Django ORM: ORM predeterminado para Django.
- Sequel: ORM para Ruby.
- SQLAlchemy: ORM para Python.
- Eloquent: ORM para PHP que se utiliza en el framework Laravel. 


# <u>Práctica</u>
## Ejercicio
Tienes una aplicación web de una tienda en línea que vende productos electrónicos. Debes almacenar y gestionar la información de los productos, clientes, pedidos y transacciones financieras utilizando un lenguaje de POO.

### **Método: SQL**
Necesito crear la base de datos, después crear la tabla de clientes y ahí poder insertar datos... pero no es tan útil considerando que no lo puedo hacer directamente desde la página web

```
-- Crear un cliente:
INSERT INTO clients (Name, Email)
VALUES ('client name', 'client email');

-- Leer todos los clientes:
SELECT * FROM clients;

-- Editar un client
UPDATE clients
SET Name = 'new client name', Email = 'new client email'
WHERE Id = client id;

-- Eliminar un client
DELETE FROM clients
WHERE Id = client id;
```

### **Método: ORM**
Con Csharp(Lenguaje de programación) Y Entity Framework(ORM) puedo hacer que los datos lleguen directamente a la base de datos desde la página web. La base de datos que utilizaré será MySql y necesitaré diferentes cosas pero puedo destacar el DbContext que suele utilizarse en este ORM
```
public class MyDbContext : DbContext
    {
        // Agregar la liena de conexión a la base de datos en MySQL
        internal readonly string connectionString = "server=localhost;port=3306;database=dbclients";
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // Declarar el uso de MySQL y enviar la linea de conexión y la versión del MySQL
            optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(ServerVersion.AutoDetect(connectionString)));
        }
        // Declaro la tabla que se va a utilizar
        public DbSet<Client> Clients { get; set; }
    }
```
Una vez hecha la conexión, voy a necesitar hacer migraciones y de ahi puedo empezar a hacer ciertas funciones directamente desde el proyecto.

Un ejemplo es la función de agregar cliente:
```
// Función para agregar un nuevo cliente a la base de datos
static void AddClient(MyDbContext db)
{
    // Imprime un mensaje para indicar que se está agregando un nuevo cliente
    Console.WriteLine("\nAdding a new client...");

    // Solicita al usuario que ingrese el nombre y el correo electrónico del cliente
    Console.Write("Name: ");
    string name = Console.ReadLine();
    Console.Write("Email: ");
    string email = Console.ReadLine();

    // Crea un nuevo objeto de tipo Client con los datos ingresados por el usuario
    var newClient = new Client
    {
        Name = name,
        Email = email
    };

    // Agrega el nuevo objeto de cliente a la base de datos
    db.Clients.Add(newClient);

    // Guarda los cambios en la base de datos
    db.SaveChanges();

    // Imprime un mensaje para indicar que se ha agregado el nuevo cliente a la base de datos
    Console.WriteLine($"Added client: {newClient.Name} ({newClient.Email})");
}
```
Y se pueden realizar funciones similares para la lectura, edición y eliminación.

Y así de simple ya puedes interactuar con una base de datos, directamente desde tu aplicación sin siquiera utilizar lenguaje SQL.

# Importancia
**ORM tiene varios beneficios:**

- Abstraccion de la base de datos
- Reducción del tiempo de desarrollo
- Portabilidad del código
- Facilidad del mantenimiento
- Seguridad para ataques de inyección
- Trabajo más eficiente y rápido

# Despedida
(Recuerda) #DetectaLaLógica: ORM se dice Object-Relational Mapping (Mapeo Objeto-Relacional) pues es una técnica de mapear objetos de un lenguaje de programación orientado a objetos con tablas de una base de datos relacional.

Puedes practicar este tema en mi repositorio de GitHub (Código en lenguaje C#): https://github.com/danielabarazarte/DetectaLaLogica

Muchas gracias por leer, si mi post te ayudó le puedes dar LIKE para que más personas lo puedan leer, también puedes comentar cualquier duda o sugerenia que tengas y agradezco que me sigas para ver más posts de este estilo, gracias <3.