Объектно-реляционное сопоставление (ORM) — это библиотека, которая реализует технику объектно-реляционного сопоставления. Это позволяет вам писать запросы к базе данных SQL, используя объектно-ориентированную парадигму предпочитаемого вами языка.

TypeORM — это ORM TypeScript, который упрощает взаимодействие с различными базами данных. Он работает с базами данных SQL, но также хорошо взаимодействует с базами данных NoSQL, такими как MongoDB.

NestJS обеспечивает высокоуровневую поддержку TypeORM из коробки. Специальный пакет TypeORM делает интеграцию относительно простой.

Шаг 1: Установка зависимостей

Прежде чем использовать TypeORM в приложении NestJS, вы должны установить его с собственным пакетом NestJS и предпочитаемой базой данных SQL. SQLite — это простой вариант, не требующий установки.

Выполните следующую команду, чтобы установить TypeORM и его собственный пакет NestJS, используя менеджер пакетов npm:

установка нпм @nestjs/типоформа

Выполните следующую команду, чтобы установить SQLite:

нпм установить sqlite3
instagram viewer

Шаг 2: Создание объекта

Сущность представляет собой набор полей, определяющих данные, хранящиеся в базе данных. TypeORM использует файл сущности для создания таблицы в вашей базе данных.

Чтобы создать объект, выполните следующие действия:

  1. Создайте файл в модуле приложения и назовите его в соответствии с соглашением об именах NestJS (.entity.ts).
  2. В вашем файле сущности импортируйте Организация, Столбец, а также Первичегенератедколумн декораторы из типоформа.
  3. В файле сущности создайте и экспортируйте класс.
  4. Заполните класс значениями, которые вы хотели бы иметь в своей базе данных, например я бы, имя, так далее.
  5. Аннотируйте свой класс сущности с помощью декоратора Entity. Это делает ваш класс узнаваемым для TypeORM как сущность.
  6. Аннотируйте свойство id с помощью декоратора PrimaryGeneratedColumn. Это говорит TypeORM пометить я бы в качестве первичного ключа и автоматически увеличивать его.
  7. Аннотируйте оставшиеся свойства с помощью декоратора Column. Это добавит их в качестве столбцов в вашу базу данных.

Например:

// источник/тест/test.entity.ts
импорт { Сущность, столбец, PrimaryGeneratedColumn } из 'типоформа';

@Организация()
экспортучебный классТест{
@PrimaryGeneratedColumn()
идентификационный номер;

@Столбец()
свойство_1: строка;

@Столбец()
свойство_2: строка;

@Столбец()
свойство_3: строка;
}

Приведенный выше файл сущности создает эту таблицу в вашей базе данных:

тест
я бы инт (11) ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT
свойство_1 варчар (255)
свойство_2 варчар (255)
свойство_3 варчар (255)

Документация TypeORM охватывает сущности более подробно.

Шаг 3: подключение вашего приложения к базе данных

Теперь, когда ваша сущность настроена, вам нужно подключить приложение к базе данных. В этом примере используется SQLite.

Выполните следующие шаги, чтобы подключить ваше приложение к базе данных:

  1. В корневом модуле ваших приложений (обычно app.module.ts файл), импорт ТипOrmModule из @nestjs/типоформ.
  2. В этот же файл импортируйте все свои объекты.
  3. в импорт массив, вызовите forRoot метод в TypeOrmModule. Метод forRoot разделяет подключение к базе данных через все модули вашего приложения.
  4. Передать пустой объект в качестве аргумента в метод forRoot; это будет объект конфигурации TypeORM.
  5. Добавить свойство, тип, в объект конфигурации и установите для него значение «склайт». Свойство type обозначает имя используемой вами базы данных.
  6. Добавьте еще одно свойство, база данных, в объект конфигурации и установите для него значение «test.db». Свойство базы данных обозначает ваше предпочтительное имя для вашей базы данных.
  7. Добавьте еще одно свойство, сущности, в объект конфигурации и установите его в пустой массив. Заполните пустой массив объектами, которые вы импортировали ранее.
  8. Добавьте еще одно свойство, синхронизировать, и установите его истинный; это свойство синхронизирует ваши сущности с вашей базой данных и обновляет ее каждый раз, когда вы запускаете код. Вы должны только установить это свойство в истинный в развитие. Во время производства вы должны установить его на ЛОЖЬ во избежание потери данных.
// источник/app.module.ts
импорт {Модуль} из '@nestjs/common';
импорт { ТипОрмМодуле } из '@nestjs/типоформ';
импорт { Тест } из './тест/тест.сущность';
импорт {Объект2} из './сущность/сущность.сущность';
импорт { Тестовый модуль } из './тест/тест.модуль';

@Модуль({
импорт: [
ТипOrmModule.forRoot({
тип: 'sqlite',
база данных: 'test.db',
сущности: [Тест, Сущность2],
синхронизировать: истинный, //только разработка
}),
ТестМодуль,
],
контроллеры: [],
провайдеры: [],
})
экспортучебный классAppModule{}

Шаг 4: Создание репозитория

Репозиторий — это уровень доступа объекта, используемый для выполнения запросов (вставка, удаление, сохранение, поиск и т. д.) к таблице, созданной объектом в базе данных. TypeORM поддерживает шаблон проектирования репозитория, таким образом, у каждой сущности есть свой собственный репозиторий.

TypeORM автоматически создает репозиторий для вашей сущности, когда вы выполняете следующие шаги:

  1. В файле модуля вашей сущности импортируйте ТипOrmModule из @nestjs/типоформ и импортируйте свою сущность.
  2. Создать импорт массив в @Модуль декоратор.
  3. В массиве импорта вызовите метод forFeature метод в TypeOrmModule.
  4. Передайте массив в качестве аргумента и заполните массив своей сущностью.
// источник/тест/test.module.ts
импорт {Модуль} из '@nestjs/common';
импорт { ТипОрмМодуле } из '@nestjs/типоформ';
импорт {Контроллер тестов} из './тест.контроллер';
импорт {ТестСервис} из './тест.сервис';
импорт { Тест } из './тест.сущность';

@Модуль({
импорт: [TypeOrmModule.forFeature([Тест])],
провайдеры: [ТестСервис],
контроллеры: [Контроллер тестов],
})

Шаг 5. Внедрение вашего репозитория в его службу с помощью внедрения зависимостей

Внедрение зависимостей — это метод разработки программного обеспечения, который представляет собой форму инверсии принципа управления. Он переносит бремя управления зависимостями с клиентского кода на библиотеку или службу, от которых он зависит.

Выполните следующие шаги, чтобы внедрить свой репозиторий в службу:

  1. В файле службы импортируйте Репозиторий из типоформа и ИнжектРепозиторий декоратор из @nestjs/типоформ. Также импортируйте объект, который вы хотите внедрить в свой репозиторий.
  2. В своем классе обслуживания создайте конструктор.
  3. объявить частный переменная, репо, как параметр в конструкторе для его инициализации.
  4. Назначьте тип репозитория для репозитория с общим типом вашей сущности.
  5. Аннотируйте репозиторий с помощью декоратора InjectRepository и передайте свою сущность в качестве аргумента.
// test.service.ts
импорт { Инъекционный } из '@nestjs/common';
импорт {Репозиторий} из 'типоформа';
импорт {ИнжектРепозиторий} из '@nestjs/типоформ';
импорт { Тест } из './тест.сущность';

@Инъекционный()
экспортучебный классТестСервис{
конструктор(
@InjectRepository(Тест)
частный репозиторий: Репозиторий<Тест>,
) {}
}

Теперь, когда ваша настройка завершена, вы можете сделать SQL-запросы на нем для получения или изменения данных.

Выполнение SQL-запросов с помощью TypeORM

Вы можете сделать любой простой SQL-запрос, вызвав методы репозитория TypeORM на репо переменная внутри вашего класса обслуживания. Вы также можете создавать сложные SQL-запросы с помощью построителя запросов TypeORM.