ORM для JavaScript (Node.js): сравнение Sequelize, TypeORM, Prisma

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

ORM для JavaScript (Node.js): сравнение и примеры

При разработке серверных приложений на Node.js взаимодействие с базой данных — одна из ключевых задач. Object-Relational Mapping (ORM) позволяет работать с реляционными базами данных через объекты JavaScript, избавляя от написания чистого SQL. В этой статье мы разберём три популярные ORM: Sequelize, TypeORM и Prisma, сравним их особенности и приведём практические примеры.

1. Sequelize

Sequelize — одна из старейших и наиболее зрелых ORM для Node.js. Поддерживает PostgreSQL, MySQL, MariaDB, SQLite и MSSQL. Работает на промисах и async/await.

Установка и настройка

npm install sequelize sequelize-cli
npm install pg pg-hstore # для PostgreSQL

Пример модели и запросов

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('postgres://user:pass@localhost:5432/mydb');

// Определение модели
const User = sequelize.define('User', {
  name: { type: DataTypes.STRING, allowNull: false },
  email: { type: DataTypes.STRING, unique: true }
});

// Создание записи
const user = await User.create({ name: 'Иван', email: 'ivan@example.com' });

// Поиск с фильтром
const users = await User.findAll({ where: { name: 'Иван' } });

// Обновление
await User.update({ email: 'new@example.com' }, { where: { id: 1 } });

Плюсы и минусы

  • + Большое сообщество, много документации
  • + Поддержка миграций и сидов
  • - Громоздкий синтаксис для сложных запросов
  • - Нет встроенной поддержки TypeScript

2. TypeORM

TypeORM — ORM, ориентированная на TypeScript, но работает и с обычным JavaScript. Поддерживает декораторы, активную запись и Data Mapper. Работает с большинством популярных СУБД.

Установка и настройка

npm install typeorm reflect-metadata
npm install pg # для PostgreSQL

Пример модели с декораторами

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column({ unique: true })
  email: string;
}

// Использование
const connection = await createConnection();
const userRepo = connection.getRepository(User);
const user = await userRepo.save({ name: 'Анна', email: 'anna@example.com' });
const users = await userRepo.find({ where: { name: 'Анна' } });

Плюсы и минусы

  • + Отличная поддержка TypeScript
  • + Два подхода: Active Record и Data Mapper
  • - Сложная конфигурация для новичков
  • - Медленные миграции в больших проектах

3. Prisma

Prisma — современная ORM, которая использует собственный язык схемы и генерирует типобезопасный клиент. Считается самой производительной и удобной для разработчиков.

Установка и настройка

npm install @prisma/client
npx prisma init

Определение схемы (schema.prisma)

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String @unique
}

Пример запросов

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

// Создание
const user = await prisma.user.create({
  data: { name: 'Ольга', email: 'olga@example.com' }
});

// Поиск
const users = await prisma.user.findMany({ where: { name: 'Ольга' } });

// Обновление
await prisma.user.update({
  where: { id: 1 },
  data: { email: 'new@example.com' }
});

Плюсы и минусы

  • + Полная типобезопасность и автодополнение в IDE
  • + Простой и понятный синтаксис
  • + Встроенные миграции и визуальный редактор Prisma Studio
  • - Зависимость от генерации клиента
  • - Меньше сообщество, чем у Sequelize

Сравнительная таблица

Ниже приведены ключевые характеристики трёх ORM:

Рекомендаций