¿Qué es un ORM? — Backend
Introducción a Object Relational Mapping con ejemplos en NestJs

Cuando eres nuevo en el mundo de la programación términos como Object-Relational-Mapper pueden sonar realmente intimidantes. Los ORM facilitan la escritura de código una vez que los dominas. Te permiten hacer consultas que usualmente harías en formato SQL con tu lenguaje de programación preferido. En esta publicación pretendo explicar qué hace un ORM, así como los pros y los contras de usarlos en tus proyectos. Una vez domines el concepto podrás aplicarlo a tus proyectos nuevos y aplicaciones existentes ya que el concepto aplica a la mayor parte de lenguajes de programación y frameworks.
¿Qué es un ORM?
ORM significa Object Relational Mapper (Mapeador objeto-relacional) por sus siglas en inglés. Antes de hablar sobre lo que es un ORM, sería mejor hablar primero de mapeo relacional de objetos como concepto.
A menos que haya trabajado exclusivamente con bases de datos NoSQL, es probable que haya escrito una buena cantidad de consultas SQL. Que por lo general, se ven así:
SELECT * FROM users WHERE email = ‘juan@gmail.com’;
Un ejemplo equivalente al anterior que vimos de SQL podría ser el siguiente usando la librería TypeORM y javascript:
const Juan = await User.findOne({ email: “juan@gmail.com” });
El mapeo objeto-relacional permite poder escribir consultas como la anterior, así como otras mucho más complicadas, utilizando el paradigma orientado a objetos de tu lenguaje de programación preferido. En el siguiente articulo veremos esta interacción utilizando TypeORM para Javascript con NestJS. Pero el mismo concepto aplica si usaras por ejemplo JPA para Java usando Spring Boot. En pocas palabras, estamos tratando de interactuar con nuestra base de datos utilizando nuestro lenguaje de elección en lugar de SQL.
Antes de poder hacer uso de las funciones FindOne
propias de la librería TypeOrm que vimos en el ejemplo anterior. Te podrás haber dado cuenta que primero es necesario tener entidades de tipo User
Es aquí donde entra el concepto de “mapear”, Esto nos traerá bastantes ventajas en el futuro ya que definimos primero los modelos o entidades que luego podremos adaptar a cualquier arquitectura que elijamos, pudiendo reciclar el código, no importa si elegimos una base de datos SQL, MySQL o Postgres.
Para eso primero debemos manualmente pasar la estructura de nuestra tabla existente SQL que tengamos (en este ejemplo asumimos que es una tabla de tipo User
con id
como la clave primaria). Procedemos a crear la relación creando la clase para la entidad de la siguiente forma:
import {
Entity,
PrimaryGeneratedColumn,
Column,
BaseEntity
} from “typeorm”;@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number; @Column()
firstName: string; @Column()
lastName: string; @Column()
age: number;
}
Las estructuras de la base de datos relacional quedan vinculadas con las entidades lógicas o base de datos virtual definida en el ORM en el ejemplo anterior, de tal modo que las acciones CRUD (Create, Read, Update, Delete) se ejecutan sobre la base de datos física de forma indirecta por medio del ORM.
Una vez creadas estas relaciones puedes interactuar con tu base de datos a travez de código javascript y funciones CRUD así:
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await user.save();const allUsers = await User.find();
const firstUser = await User.findOne(1);
const timber = await User.findOne({ firstName: "Timber", lastName: "Saw" });await timber.remove();
Llegados a este punto, parece claro el beneficio de usar entidades de la base de datos virtual sin necesidad de generar código SQL ya que son evidentes importantes ventajas a la hora de acelerar el desarrollo o implementación de nuestras aplicaciones, para decidir si es la decisión mas adecuada a nuestro desarrollo podemos ver algunas ventajas y desventajas del uso de ORMs.
Ventajas:
- Escribe el modelo de datos en un solo lugar — es más fácil de mantener y menos repetición.
- Muchas cosas se hacen automáticamente: manejo de bases de datos, tipos de datos, relaciones, etc.
- No es necesario escribir sintaxis SQL (fácil de aprender, difícil de dominar). Usa tu forma natural de programar.
- Abstracción de la base de datos: puedes cambiar el tipo de base de datos cuando lo desee.
- Aprovecha la programación orientada a objetos, por lo que cosas como la herencia son mas fáciles de lograr.
Desventajas:
- Tienes que aprenderlo, y las bibliotecas ORM no siempre son sencillas.
- El rendimiento está bien, pero es fácil descuidarlo.
- Hace que sea fácil olvidar (o nunca aprender) lo que está sucediendo detrás de escena, lo que puede conducir a una variedad de problemas de mantenimiento.
¿Estás de acuerdo con lo escrito o agregarías algo? Por favor deja un comentario dando tu punto de vista, clap 👏 y comparte. Esto me ayudara a mejorar el contenido y motivarme para hacer más. Te invito a que leas otro de mis artículos.