TypeORM
TypeORM - это одна из ведущих ORM для TypeScript и Node.js
Особенности
- Поддержка TypeScript: Типы сущностей (Entity) и репозиториев (Repository) тесно интегрированы, что даёт лучшую автодополняемость и безопасность типов
- Два паттерна: Поддерживает как Data Mapper (работа через репозиторий), так и Active Record (методы прямо в сущности)
- Декларативный стиль: Структура таблиц описывается через декораторы (@Entity(), @Column()), что делает код очень читаемым
Реализация:
1234567891011121314// user.entity.tsimport { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';@Entity() // Указывает, что это модель таблицыexport class User {@PrimaryGeneratedColumn()id: number;@Column()name: string;@Column({ unique: true })email: string;}
1234567891011// users.module.tsimport { Module } from '@nestjs/common';import { TypeOrmModule } from '@nestjs/typeorm';import { User } from './user.entity';import { UsersService } from './users.service';@Module({imports: [TypeOrmModule.forFeature([User])], // Регистрируем сущностьproviders: [UsersService],})export class UsersModule
12345678910111213141516171819202122// users.service.tsimport { Injectable } from '@nestjs/common';import { InjectRepository } from '@nestjs/typeorm';import { Repository } from 'typeorm';import { User } from './user.entity';@Injectable()export class UsersService {constructor(@InjectRepository(User) // Внедряем репозиторий для Userprivate usersRepository: Repository<User>,) {}async create(userData: Partial<User>): Promise<User> {const newUser = this.usersRepository.create(userData);return this.usersRepository.save(newUser); // Автоматический INSERT}async findAll(): Promise<User[]> {return this.usersRepository.find(); // Автоматический SELECT *}}