TypeORM

TypeORM - это одна из ведущих ORM для TypeScript и Node.js

Особенности

  • Поддержка TypeScript: Типы сущностей (Entity) и репозиториев (Repository) тесно интегрированы, что даёт лучшую автодополняемость и безопасность типов
  • Два паттерна: Поддерживает как Data Mapper (работа через репозиторий), так и Active Record (методы прямо в сущности)
  • Декларативный стиль: Структура таблиц описывается через декораторы (@Entity(), @Column()), что делает код очень читаемым

Реализация:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// user.entity.tsimport { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() // Указывает, что это модель таблицыexport class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column({ unique: true }) email: string;}
1
2
3
4
5
6
7
8
9
10
11
// 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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) // Внедряем репозиторий для User private 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 * }}