DEV Community

Cover image for Object-Relational Mapping (ORM)| Explicación Completa (Definición, uso, estructura y práctica)
Daniela "Ingeniela" Barazarte
Daniela "Ingeniela" Barazarte

Posted on

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

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

Teoría

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

#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.

Uso

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.

Práctica

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;
Enter fullscreen mode Exit fullscreen mode

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; }
    }
Enter fullscreen mode Exit fullscreen mode

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})");
}
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)