Обектно-релационно картографиране (ORM) е библиотека, която прилага техниката на обектно-релационно картографиране. Това ви позволява да пишете заявки за SQL база данни, като използвате обектно-ориентираната парадигма на предпочитания от вас език.
TypeORM е TypeScript ORM, който прави взаимодействието с различни бази данни много лесно. Работи с SQL бази данни, но също така се свързва добре с NoSQL бази данни като MongoDB.
NestJS предоставя поддръжка на високо ниво за TypeORM извън кутията. Специализираният пакет TypeORM прави интеграцията относително лесна.
Стъпка 1: Инсталиране на зависимости
Преди да използвате TypeORM в приложение NestJS, трябва да го инсталирате с родния пакет NestJS и предпочитаната от вас SQL база данни. SQLite е проста опция без инсталиране.
Изпълнете следната команда, за да инсталирате TypeORM и неговия собствен пакет NestJS, като използвате мениджърът на пакети npm:
npm инсталирайте @nestjs/typeorm typeorm
Изпълнете следната команда, за да инсталирате SQLite:
npm Инсталирай sqlite3
Стъпка 2: Създаване на обект
Субектът е колекция от полета, дефиниращи данните, съхранявани в база данни. TypeORM използва файла на обекта, за да създаде таблица във вашата база данни.
Следвайте стъпките по-долу, за да създадете обект:
- Създайте файл във вашия приложен модул и го наименувайте, като следвате конвенцията за именуване на NestJS (
.entity.ts ). - Във вашия файл на обекта импортирайте Обект, Колона, и Основно генерирана колона декоратори от typeorm.
- Във вашия файл на обект създайте и експортирайте клас.
- Попълнете класа със стойностите, които искате във вашата база данни, като документ за самоличност, имеи т.н.
- Анотирайте своя клас обект с декоратора на обект. Това прави вашия клас разпознаваем за TypeORM като обект.
- Анотирайте свойството си id с декоратора PrimaryGeneratedColumn. Това казва на TypeORM да маркира документ за самоличност като първичен ключ и го увеличава автоматично.
- Анотирайте останалите свойства с декоратора на колони. Това ги добавя като колони във вашата база данни.
Например:
// src/test/test.entity.ts
импортиране { Обект, колона, първично генерирана колона } от 'typeorm';@Entity()
износкласТест{
@PrimaryGeneratedColumn()
Идентификационен номер;@Колона()
свойство_1: низ;@Колона()
свойство_2: низ;
@Колона()
property_3: низ;
}
Файлът с обект по-горе създава тази таблица във вашата база данни:
тест | ||
---|---|---|
документ за самоличност | int (11) | PRIMARY KEY AUTO_INCREMENT |
свойство_1 | varchar (255) | |
имот_2 | varchar (255) | |
свойство_3 | varchar (255) |
The TypeORM документация обхваща субектите в по-големи подробности.
Стъпка 3: Свързване на вашето приложение към база данни
Сега, когато вашият обект е настроен, ще трябва да свържете приложението си към база данни. Този пример използва SQLite.
Следвайте стъпките по-долу, за да свържете вашето приложение към база данни:
- В основния модул на вашите приложения (обикновено app.module.ts файл), импортиране TypeOrmModule от @nestjs/typeorm.
- В същия файл импортирайте всичките си обекти.
- В внос масив, обадете се на заRoot метод на TypeOrmModule. Методът forRoot споделя връзката с базата данни през всички модули във вашето приложение.
- Подайте празен обект като аргумент в метода forRoot; това ще бъде конфигурационният обект TypeORM.
- Добавяне на собственост, Тип, към конфигурационния обект и го настройте на „sqlite“. Свойството тип обозначава името на базата данни, която използвате.
- Добавете друг имот, база данни, към конфигурационния обект и го настройте на „test.db“. Свойството на базата данни обозначава предпочитаното от вас име за вашата база данни.
- Добавете друг имот, образувания, към конфигурационния обект и го настройте на празен масив. Попълнете празния масив с обектите, които сте импортирали по-рано.
- Добавете друг имот, синхронизирами го задайте вярно; това свойство синхронизира вашите обекти с вашата база данни и я актуализира всеки път, когато стартирате кода. Трябва да зададете това свойство само на вярно в развитие. По време на производството трябва да го настроите на невярно за да избегнете загуба на данни.
// src/app.module.ts
импортиране { Модул } от '@nestjs/common';
импортиране { TypeOrmModule } от '@nestjs/typeorm';
импортиране { Тест } от './test/test.entity';
импортиране { Entity2 } от './entity/entity.entity';
импортиране { TestModule } от './test/test.module';
@Модул({
внос: [
TypeOrmModule.forRoot({
Тип: 'sqlite',
база данни: 'test.db',
образувания: [Тест, Entity2],
синхронизирам: вярно, //само за разработка
}),
TestModule,
],
контролери: [],
доставчици: [],
})
износкласAppModule{}
Стъпка 4: Създаване на хранилище
Хранилището е слой за достъп на обект, използван за извършване на заявки (вмъкване, изтриване, запазване, намиране и т.н.) на таблица, създадена от обекта в базата данни. TypeORM поддържа шаблона за проектиране на хранилище, като по този начин всеки обект има свое собствено хранилище.
TypeORM автоматично създава хранилище за вашия обект, когато следвате стъпките по-долу:
- Във файла на модула на вашия обект импортирайте TypeOrmModule от @nestjs/typeorm и импортирайте вашия обект.
- Създайте внос масив в @Модул декоратор.
- В масива за импортиране извикайте forFeature метод на TypeOrmModule.
- Предайте масив като аргумент във вашия и попълнете масива с вашия обект.
// src/test/test.module.ts
импортиране { Модул } от '@nestjs/common';
импортиране { TypeOrmModule } от '@nestjs/typeorm';
импортиране { TestController } от './test.controller';
импортиране { TestService } от './test.service';
импортиране { Тест } от './test.entity';
@Модул({
внос: [TypeOrmModule.forFeature([Тест])],
доставчици: [TestService],
контролери: [TestController],
})
Стъпка 5: Инжектиране на вашето хранилище в неговата услуга с помощта на инжектиране на зависимости
Инжектирането на зависимост е техника за софтуерно инженерство, която е форма на принципа на инверсия на контрола. Той премества тежестта на управлението на зависимостите от клиентския код към библиотеката или услугата, от която зависи.
Следвайте стъпките по-долу, за да инжектирате вашето хранилище в услуга:
- Във вашия сервизен файл импортирайте Хранилище от typeorm и на InjectRepository декоратор от @nestjs/typeorm. Също така импортирайте обекта, който искате да инжектирате в неговото хранилище.
- Във вашия клас на обслужване създайте a конструктор.
- Декларирайте a частен променлива, репо, като параметър в конструктора, за да го инициализирате.
- Задайте тип хранилище на репо с общ тип на вашия обект.
- Анотирайте репо с декоратора InjectRepository и предайте вашия обект като аргумент.
// test.service.ts
импортиране { Инжекционен } от '@nestjs/common';
импортиране { Хранилище } от 'typeorm';
импортиране { InjectRepository } от '@nestjs/typeorm';
импортиране { Тест } от './test.entity';
@Инжекционен()
износкласTestService{
конструктор(
@InjectRepository(Тест)
частно репо: Хранилище<Тест>,
) {}
}
Сега, когато настройката ви е завършена, можете да направите SQL заявки върху него, за да извлечете или промените данни.
Създаване на SQL заявки с TypeORM
Можете да направите всяка проста SQL заявка, като извикате методите на хранилището на TypeORM на репо променлива във вашия клас на обслужване. Можете също да създавате сложни SQL заявки, като използвате създателя на заявки на TypeORM.