Objektno-relacijski maper (ORM) je biblioteka koja implementira tehniku ​​objektno-relacijskog mapiranja. To vam omogućuje pisanje SQL upita baze podataka koristeći objektno orijentiranu paradigmu vašeg željenog jezika.

TypeORM je TypeScript ORM koji čini sučelje s različitim bazama podataka vrlo lakim. Radi sa SQL bazama podataka, ali također dobro surađuje s NoSQL bazama podataka kao što je MongoDB.

NestJS pruža podršku visoke razine za TypeORM izvan okvira. Namjenski paket TypeORM čini integraciju relativno jednostavnom.

Korak 1: Instaliranje ovisnosti

Prije korištenja TypeORM-a u NestJS aplikaciji, morate ga instalirati s izvornim NestJS paketom i željenom SQL bazom podataka. SQLite je jednostavna opcija bez instalacije.

Pokrenite sljedeću naredbu da instalirate TypeORM i njegov nativni NestJS paket, koristeći npm upravitelj paketa:

npm instalirati @nestjs/typeorm typeorm

Pokrenite sljedeću naredbu da instalirate SQLite:

npm instalirati sqlite3

Korak 2: Stvaranje entiteta

Entitet je zbirka polja koja definiraju podatke pohranjene u bazi podataka. TypeORM koristi datoteku entiteta za stvaranje tablice u vašoj bazi podataka.

Za izradu entiteta slijedite korake u nastavku:

  1. Napravite datoteku u svom aplikacijskom modulu i nazovite je prema NestJS konvenciji imenovanja (.entitet.ts).
  2. U svoju datoteku entiteta uvezite Entitet, Stupac, i Primarni generirani stupac dekorateri iz typeorm.
  3. U svojoj datoteci entiteta stvorite i izvezite klasu.
  4. Napunite klasu vrijednostima koje želite u svojoj bazi podataka, npr iskaznica, Imeitd.
  5. Označite svoju klasu entiteta pomoću dekoratera entiteta. To čini vašu klasu prepoznatljivom za TypeORM kao entitet.
  6. Obilježite svoje svojstvo id-a dekoratorom PrimaryGeneratedColumn. Ovo govori TypeORM-u da označi iskaznica kao primarni ključ i automatski ga povećavati.
  7. Označite preostala svojstva s dekoratorom stupaca. Ovo ih dodaje kao stupce u vašoj bazi podataka.

Na primjer:

// src/test/test.entity.ts
uvoz { Entitet, stupac, primarni generirani stupac } iz 'typeorm';

@Entitet()
izvozrazredaTest{
@PrimaryGeneratedColumn()
ID broj;

@Stupac()
svojstvo_1: niz;

@Stupac()
svojstvo_2: niz;

@Stupac()
svojstvo_3: niz;
}

Gornja datoteka entiteta stvara ovu tablicu u vašoj bazi podataka:

test
iskaznica int (11) PRIMARNI KLJUČ AUTO_INKREMENT
svojstvo_1 varchar (255)
svojstvo_2 varchar (255)
svojstvo_3 varchar (255)

The TypeORM dokumentacija detaljnije pokriva entitete.

Korak 3: Povezivanje vaše aplikacije s bazom podataka

Sada kada je vaš entitet postavljen, morat ćete povezati svoju aplikaciju s bazom podataka. Ovaj primjer koristi SQLite.

Slijedite korake u nastavku kako biste svoju aplikaciju povezali s bazom podataka:

  1. U korijenskom modulu vaših aplikacija (obično app.module.ts datoteka), uvoz TypeOrmModule iz @nestjs/typeorm.
  2. U istu datoteku uvezite sve svoje entitete.
  3. u uvozi niz, nazovite zaRoot metoda na TypeOrmModule. Metoda forRoot dijeli vezu s bazom podataka kroz sve module u vašoj aplikaciji.
  4. Proslijedite prazan objekt kao argument u metodu forRoot; ovo će biti TypeORM konfiguracijski objekt.
  5. Dodajte nekretninu, tip, u konfiguracijski objekt i postavite ga na “sqlite”. Svojstvo tipa označava naziv baze podataka koju koristite.
  6. Dodajte drugu nekretninu, baza podataka, u konfiguracijski objekt i postavite ga na “test.db”. Svojstvo baze podataka označava vaš željeni naziv za vašu bazu podataka.
  7. Dodajte drugu nekretninu, entiteta, u konfiguracijski objekt i postavite ga na prazan niz. Popunite prazan niz entitetima koje ste ranije uvezli.
  8. Dodajte drugu nekretninu, sinkronizirati, i postavite ga pravi; ovo svojstvo sinkronizira vaše entitete s vašom bazom podataka i ažurira je svaki put kada pokrenete kod. Ovo svojstvo trebate postaviti samo na pravi u razvoju. Tijekom proizvodnje trebali biste ga postaviti na lažno kako biste izbjegli gubitak podataka.
// src/app.module.ts
uvoz { Modul } iz '@nestjs/zajedničko';
uvoz { TypeOrmModule } iz '@nestjs/typeorm';
uvoz { Test } iz './test/test.entitet';
uvoz {Entity2} iz './entitet/entitet.entitet';
uvoz { TestModule } iz './test/test.modul';

@Modul({
uvozi: [
TypeOrmModule.zaKorijen({
tip: 'sqlite',
baza podataka: 'test.db',
entiteta: [Test, Entitet2],
sinkronizirati: pravi, //samo razvoj
}),
TestModule,
],
kontrolori: [],
pružatelji usluga: [],
})
izvozrazredaAppModule{}

Korak 4: Stvaranje repozitorija

Repozitorij je pristupni sloj entiteta koji se koristi za postavljanje upita (umetanje, brisanje, spremanje, pronalaženje itd.) na tablici koju je kreirao entitet u bazi podataka. TypeORM podržava uzorak dizajna repozitorija, stoga svaki entitet ima svoje repozitorij.

TypeORM automatski stvara spremište za vaš entitet kada slijedite korake u nastavku:

  1. U datoteci modula vašeg entiteta izvršite uvoz TypeOrmModule iz @nestjs/typeorm i uvezite svoj entitet.
  2. Stvorite uvozi niz u @Modul dekorater.
  3. U polju uvoza pozovite zaFeature metoda na TypeOrmModule.
  4. Proslijedite niz kao argument u svoj i popunite niz svojim entitetom.
// src/test/test.module.ts
uvoz { Modul } iz '@nestjs/zajedničko';
uvoz { TypeOrmModule } iz '@nestjs/typeorm';
uvoz { TestController } iz './test.controller';
uvoz { TestService } iz './test.service';
uvoz { Test } iz './test.entitet';

@Modul({
uvozi: [TypeOrmModule.forFeature([Test])],
pružatelji usluga: [TestService],
kontrolori: [TestController],
})

Korak 5: Ubacivanje vašeg repozitorija u njegovu uslugu pomoću ubrizgavanja ovisnosti

Injekcija ovisnosti je tehnika softverskog inženjeringa koja je oblik načela inverzije kontrole. Prebacuje teret upravljanja ovisnostima s koda klijenta na knjižnicu ili uslugu o kojoj ovisi.

Slijedite korake u nastavku da biste svoje spremište umetnuli u uslugu:

  1. U vašoj servisnoj datoteci, import Spremište iz typeorm i InjectRepository dekorater iz @nestjs/typeorm. Također uvezite entitet u čije spremište želite ubaciti.
  2. U svojoj klasi usluge stvorite a konstruktor.
  3. Izjaviti a privatni varijabla, repo, kao parametar u konstruktoru za njegovu inicijalizaciju.
  4. Dodijelite vrstu repozitorija repo-u s generičkom vrstom vašeg entiteta.
  5. Označite repo s InjectRepository dekoratorom i proslijedite svoj entitet kao argument.
// test.service.ts
uvoz { Injekcioni } iz '@nestjs/zajedničko';
uvoz { Spremište } iz 'typeorm';
uvoz {InjectRepository} iz '@nestjs/typeorm';
uvoz { Test } iz './test.entitet';

@Injekcioni()
izvozrazredaTestService{
konstruktor(
@InjectRepository(Test)
privatni repo: Repozitorij<Test>,
) {}
}

Sada kada je vaše postavljanje dovršeno, možete napraviti SQL upiti na njemu za dohvaćanje ili izmjenu podataka.

Izrada SQL upita s TypeORM

Možete napraviti bilo koji jednostavan SQL upit pozivanjem TypeORM-ovih metoda repozitorija na repo varijabla unutar vaše klase usluge. Također možete stvoriti složene SQL upite pomoću TypeORM-ovog alata za izradu upita.