Object-Relational Mapper (ORM) to biblioteka implementująca technikę mapowania obiektowo-relacyjnego. Pozwala to na pisanie zapytań do bazy danych SQL przy użyciu zorientowanego obiektowo paradygmatu preferowanego języka.

TypeORM to TypeScript ORM, który bardzo ułatwia łączenie się z różnymi bazami danych. Działa z bazami danych SQL, ale także ładnie współpracuje z bazami danych NoSQL, takimi jak MongoDB.

NestJS zapewnia obsługę wysokiego poziomu dla TypeORM po wyjęciu z pudełka. Dedykowany pakiet TypeORM sprawia, że ​​integracja jest stosunkowo łatwa.

Krok 1: Instalowanie zależności

Przed użyciem TypeORM w aplikacji NestJS, musisz zainstalować go z jego natywnym pakietem NestJS i preferowaną bazą danych SQL. SQLite to prosta, bezinstalacyjna opcja.

Uruchom następujące polecenie, aby zainstalować TypeORM i jego natywny pakiet NestJS, używając menedżer pakietów npm:

instalacja npm @nestjs/typorma typormy

Uruchom następujące polecenie, aby zainstalować SQLite:

npm zainstalować sqlite3

Krok 2: Tworzenie podmiotu

instagram viewer

Encja to zbiór pól definiujących dane przechowywane w bazie danych. TypeORM używa pliku encji do utworzenia tabeli w Twojej bazie danych.

Wykonaj poniższe czynności, aby utworzyć encję:

  1. Utwórz plik w swoim module aplikacji i nazwij go zgodnie z konwencją nazewnictwa NestJS (.podmiot.ts).
  2. W pliku podmiotu zaimportuj Podmiot, Kolumna, oraz Podstawowa generowana kolumna dekoratorzy z typorma.
  3. W pliku encji utwórz i wyeksportuj klasę.
  4. Wypełnij klasę wartościami, które chcesz umieścić w swojej bazie danych, na przykład ID, Nazwaitp.
  5. Dodaj adnotację do swojej klasy encji za pomocą dekoratora Entity. To sprawia, że ​​Twoja klasa jest rozpoznawalna przez TypeORM jako jednostka.
  6. Dodaj adnotację do swojej właściwości id za pomocą dekoratora PrimaryGeneratedColumn. To mówi TypeORM, aby zaznaczyć ID jako klucz podstawowy i automatycznie go zwiększaj.
  7. Opisz pozostałe właściwości za pomocą dekoratora kolumn. To dodaje je jako kolumny w Twojej bazie danych.

Na przykład:

// src/test/test.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } z „typorma”;

@Podmiot()
eksportklasaTest{
@PrimarygeneratedColumn()
numer identyfikacyjny;

@Kolumna()
właściwość_1: ciąg;

@Kolumna()
właściwość_2: ciąg;

@Kolumna()
właściwość_3: ciąg;
}

Powyższy plik encji tworzy tę tabelę w Twojej bazie danych:

test
ID wewn (11) KLUCZ PODSTAWOWY AUTO_INCREMENT
właściwość_1 warchar (255)
właściwość_2 warchar (255)
właściwość_3 warchar (255)

The Dokumentacja typu ORM obejmuje podmioty bardziej szczegółowo.

Krok 3: Łączenie aplikacji z bazą danych

Teraz, gdy Twoja jednostka jest już skonfigurowana, musisz połączyć swoją aplikację z bazą danych. W tym przykładzie użyto SQLite.

Wykonaj poniższe czynności, aby połączyć aplikację z bazą danych:

  1. W module głównym aplikacji (zwykle app.moduł.ts plik), importuj TypOrmModuł z @nestjs/typeorm.
  2. W tym samym pliku zaimportuj wszystkie swoje encje.
  3. w import tablica, zadzwoń do dla root metoda na TypeOrmModule. Metoda forRoot współdzieli połączenie z bazą danych przez wszystkie moduły w aplikacji.
  4. Przekaż pusty obiekt jako argument do metody forRoot; będzie to obiekt konfiguracyjny TypeORM.
  5. Dodaj nieruchomość, rodzaj, do obiektu konfiguracyjnego i ustaw go na „sqlite”. Właściwość type oznacza nazwę używanej bazy danych.
  6. Dodaj kolejną właściwość, Baza danych, do obiektu konfiguracyjnego i ustaw go na „test.db”. Właściwość bazy danych oznacza preferowaną nazwę bazy danych.
  7. Dodaj kolejną właściwość, podmioty, do obiektu konfiguracyjnego i ustaw go na pustą tablicę. Wypełnij pustą tablicę encjami, które zaimportowałeś wcześniej.
  8. Dodaj kolejną właściwość, synchronizowaći ustaw go PRAWDA; ta właściwość synchronizuje twoje jednostki z bazą danych i aktualizuje ją za każdym razem, gdy uruchamiasz kod. Powinieneś ustawić tę właściwość tylko na PRAWDA w rozwoju. Podczas produkcji należy ustawić go na fałszywy aby uniknąć utraty danych.
// src/app.module.ts
import { Moduł } z '@nestjs/wspólne';
import { TypeOrmModuł } z '@nestjs/typeorm';
import { Test } z „./test/test.jednostka”;
import { Jednostka2 } z „./podmiot/podmiot.podmiot”;
import { Moduł testowy } z './test/test.moduł';

@Moduł({
import: [
TypOrmModuł.dla roota({
rodzaj: 'sqlite',
Baza danych: 'test.db',
podmioty: [Test, podmiot2],
synchronizować: PRAWDA, //tylko rozwój
}),
Moduł testowy,
],
kontrolerzy: [],
dostawcy: [],
})
eksportklasaModuł aplikacji{}

Krok 4: Tworzenie repozytorium

Repozytorium to warstwa dostępu encji używana do wykonywania zapytań (wstawiania, usuwania, zapisywania, wyszukiwania itp.) w tabeli utworzonej przez encję w bazie danych. TypeORM obsługuje wzorzec projektowy repozytorium, dlatego każda jednostka ma swoje własne repozytorium.

TypeORM automatycznie tworzy repozytorium dla Twojej encji po wykonaniu poniższych kroków:

  1. W pliku modułu swojej jednostki zaimportuj TypOrmModuł z @nestjs/typeorm i zaimportuj swój podmiot.
  2. Stworzyć import tablica w @Moduł dekorator.
  3. W tablicy importów wywołaj dla funkcji metoda na TypeOrmModule.
  4. Przekaż tablicę jako argument do swojego i wypełnij tablicę swoją jednostką.
// src/test/test.module.ts
import { Moduł } z '@nestjs/wspólne';
import { TypeOrmModuł } z '@nestjs/typeorm';
import { Kontroler Testów } z './test.kontroler';
import { Usługa testowa } z './usługa.testowa';
import { Test } z „./podmiot.testowy”;

@Moduł({
import: [TypeOrmModule.forFeature([Test])],
dostawcy: [Usługa testowa],
kontrolerzy: [Kontroler Testów],
})

Krok 5: Wstrzyknięcie repozytorium do jego usługi za pomocą wstrzykiwania zależności

Wstrzykiwanie zależności to technika inżynierii oprogramowania, która jest formą odwrócenia zasady sterowania. Przenosi ciężar zarządzania zależnościami z kodu klienta na bibliotekę lub usługę, od której zależy.

Wykonaj poniższe czynności, aby wstrzyknąć swoje repozytorium do usługi:

  1. W pliku usługi zaimportuj Magazyn z typorma i InjectRepository dekorator z @nestjs/typeorm. Zaimportuj również encję, którą chcesz wstrzyknąć do jej repozytorium.
  2. W swojej klasie usług utwórz konstruktor.
  3. Zadeklaruj prywatny zmienny, repozytorium, jako parametr w konstruktorze, aby go zainicjować.
  4. Przypisz typ repozytorium do repozytorium z ogólnym typem twojej encji.
  5. Opisz repozytorium za pomocą dekoratora InjectRepository i przekaż swoją jednostkę jako argument.
// test.usługa.ts
import { do wstrzykiwania } z '@nestjs/wspólne';
import { Repozytorium } z „typorma”;
import { InjectRepository } z '@nestjs/typeorm';
import { Test } z „./podmiot.testowy”;

@do wstrzykiwania()
eksportklasaUsługa testowa{
konstruktor(
@InjectRepository(Test)
prywatne repozytorium: Repozytorium<Test>,
) {}
}

Teraz, gdy konfiguracja jest zakończona, możesz zrobić Zapytania SQL na nim, aby pobrać lub zmodyfikować dane.

Wykonywanie zapytań SQL z TypeORM

Możesz wykonać dowolne proste zapytanie SQL, wywołując metody repozytorium TypeORM na repozytorium zmienna wewnątrz Twojej klasy usług. Możesz także tworzyć złożone zapytania SQL za pomocą konstruktora zapytań TypeORM.