Объектно-реляционное сопоставление (ORM) — это библиотека, которая реализует технику объектно-реляционного сопоставления. Это позволяет вам писать запросы к базе данных SQL, используя объектно-ориентированную парадигму предпочитаемого вами языка.
TypeORM — это ORM TypeScript, который упрощает взаимодействие с различными базами данных. Он работает с базами данных SQL, но также хорошо взаимодействует с базами данных NoSQL, такими как MongoDB.
NestJS обеспечивает высокоуровневую поддержку TypeORM из коробки. Специальный пакет TypeORM делает интеграцию относительно простой.
Шаг 1: Установка зависимостей
Прежде чем использовать TypeORM в приложении NestJS, вы должны установить его с собственным пакетом NestJS и предпочитаемой базой данных SQL. SQLite — это простой вариант, не требующий установки.
Выполните следующую команду, чтобы установить TypeORM и его собственный пакет NestJS, используя менеджер пакетов npm:
установка нпм @nestjs/типоформа
Выполните следующую команду, чтобы установить SQLite:
нпм установить sqlite3
Шаг 2: Создание объекта
Сущность представляет собой набор полей, определяющих данные, хранящиеся в базе данных. TypeORM использует файл сущности для создания таблицы в вашей базе данных.
Чтобы создать объект, выполните следующие действия:
- Создайте файл в модуле приложения и назовите его в соответствии с соглашением об именах NestJS (
.entity.ts ). - В вашем файле сущности импортируйте Организация, Столбец, а также Первичегенератедколумн декораторы из типоформа.
- В файле сущности создайте и экспортируйте класс.
- Заполните класс значениями, которые вы хотели бы иметь в своей базе данных, например я бы, имя, так далее.
- Аннотируйте свой класс сущности с помощью декоратора Entity. Это делает ваш класс узнаваемым для TypeORM как сущность.
- Аннотируйте свойство id с помощью декоратора PrimaryGeneratedColumn. Это говорит TypeORM пометить я бы в качестве первичного ключа и автоматически увеличивать его.
- Аннотируйте оставшиеся свойства с помощью декоратора Column. Это добавит их в качестве столбцов в вашу базу данных.
Например:
// источник/тест/test.entity.ts
импорт { Сущность, столбец, PrimaryGeneratedColumn } из 'типоформа';@Организация()
экспортучебный классТест{
@PrimaryGeneratedColumn()
идентификационный номер;@Столбец()
свойство_1: строка;@Столбец()
свойство_2: строка;
@Столбец()
свойство_3: строка;
}
Приведенный выше файл сущности создает эту таблицу в вашей базе данных:
тест | ||
---|---|---|
я бы | инт (11) | ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT |
свойство_1 | варчар (255) | |
свойство_2 | варчар (255) | |
свойство_3 | варчар (255) |
Документация TypeORM охватывает сущности более подробно.
Шаг 3: подключение вашего приложения к базе данных
Теперь, когда ваша сущность настроена, вам нужно подключить приложение к базе данных. В этом примере используется SQLite.
Выполните следующие шаги, чтобы подключить ваше приложение к базе данных:
- В корневом модуле ваших приложений (обычно app.module.ts файл), импорт ТипOrmModule из @nestjs/типоформ.
- В этот же файл импортируйте все свои объекты.
- в импорт массив, вызовите forRoot метод в TypeOrmModule. Метод forRoot разделяет подключение к базе данных через все модули вашего приложения.
- Передать пустой объект в качестве аргумента в метод forRoot; это будет объект конфигурации TypeORM.
- Добавить свойство, тип, в объект конфигурации и установите для него значение «склайт». Свойство type обозначает имя используемой вами базы данных.
- Добавьте еще одно свойство, база данных, в объект конфигурации и установите для него значение «test.db». Свойство базы данных обозначает ваше предпочтительное имя для вашей базы данных.
- Добавьте еще одно свойство, сущности, в объект конфигурации и установите его в пустой массив. Заполните пустой массив объектами, которые вы импортировали ранее.
- Добавьте еще одно свойство, синхронизировать, и установите его истинный; это свойство синхронизирует ваши сущности с вашей базой данных и обновляет ее каждый раз, когда вы запускаете код. Вы должны только установить это свойство в истинный в развитие. Во время производства вы должны установить его на ЛОЖЬ во избежание потери данных.
// источник/app.module.ts
импорт {Модуль} из '@nestjs/common';
импорт { ТипОрмМодуле } из '@nestjs/типоформ';
импорт { Тест } из './тест/тест.сущность';
импорт {Объект2} из './сущность/сущность.сущность';
импорт { Тестовый модуль } из './тест/тест.модуль';
@Модуль({
импорт: [
ТипOrmModule.forRoot({
тип: 'sqlite',
база данных: 'test.db',
сущности: [Тест, Сущность2],
синхронизировать: истинный, //только разработка
}),
ТестМодуль,
],
контроллеры: [],
провайдеры: [],
})
экспортучебный классAppModule{}
Шаг 4: Создание репозитория
Репозиторий — это уровень доступа объекта, используемый для выполнения запросов (вставка, удаление, сохранение, поиск и т. д.) к таблице, созданной объектом в базе данных. TypeORM поддерживает шаблон проектирования репозитория, таким образом, у каждой сущности есть свой собственный репозиторий.
TypeORM автоматически создает репозиторий для вашей сущности, когда вы выполняете следующие шаги:
- В файле модуля вашей сущности импортируйте ТипOrmModule из @nestjs/типоформ и импортируйте свою сущность.
- Создать импорт массив в @Модуль декоратор.
- В массиве импорта вызовите метод forFeature метод в TypeOrmModule.
- Передайте массив в качестве аргумента и заполните массив своей сущностью.
// источник/тест/test.module.ts
импорт {Модуль} из '@nestjs/common';
импорт { ТипОрмМодуле } из '@nestjs/типоформ';
импорт {Контроллер тестов} из './тест.контроллер';
импорт {ТестСервис} из './тест.сервис';
импорт { Тест } из './тест.сущность';
@Модуль({
импорт: [TypeOrmModule.forFeature([Тест])],
провайдеры: [ТестСервис],
контроллеры: [Контроллер тестов],
})
Шаг 5. Внедрение вашего репозитория в его службу с помощью внедрения зависимостей
Внедрение зависимостей — это метод разработки программного обеспечения, который представляет собой форму инверсии принципа управления. Он переносит бремя управления зависимостями с клиентского кода на библиотеку или службу, от которых он зависит.
Выполните следующие шаги, чтобы внедрить свой репозиторий в службу:
- В файле службы импортируйте Репозиторий из типоформа и ИнжектРепозиторий декоратор из @nestjs/типоформ. Также импортируйте объект, который вы хотите внедрить в свой репозиторий.
- В своем классе обслуживания создайте конструктор.
- объявить частный переменная, репо, как параметр в конструкторе для его инициализации.
- Назначьте тип репозитория для репозитория с общим типом вашей сущности.
- Аннотируйте репозиторий с помощью декоратора InjectRepository и передайте свою сущность в качестве аргумента.
// test.service.ts
импорт { Инъекционный } из '@nestjs/common';
импорт {Репозиторий} из 'типоформа';
импорт {ИнжектРепозиторий} из '@nestjs/типоформ';
импорт { Тест } из './тест.сущность';
@Инъекционный()
экспортучебный классТестСервис{
конструктор(
@InjectRepository(Тест)
частный репозиторий: Репозиторий<Тест>,
) {}
}
Теперь, когда ваша настройка завершена, вы можете сделать SQL-запросы на нем для получения или изменения данных.
Выполнение SQL-запросов с помощью TypeORM
Вы можете сделать любой простой SQL-запрос, вызвав методы репозитория TypeORM на репо переменная внутри вашего класса обслуживания. Вы также можете создавать сложные SQL-запросы с помощью построителя запросов TypeORM.