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: