Objektno-relacijski preslikav (ORM) je knjižnica, ki izvaja tehniko objektno-relacijskega preslikave. To vam omogoča pisanje poizvedb po bazi podatkov SQL z uporabo objektno usmerjene paradigme vašega želenega jezika.

TypeORM je TypeScript ORM, ki omogoča zelo enostavno povezovanje z različnimi zbirkami podatkov. Deluje z bazami podatkov SQL, vendar se lepo povezuje tudi z bazami podatkov NoSQL, kot je MongoDB.

NestJS zagotavlja podporo na visoki ravni za TypeORM že pripravljeno. Namenski paket TypeORM omogoča razmeroma enostavno integracijo.

1. korak: Namestitev odvisnosti

Preden uporabite TypeORM v aplikaciji NestJS, jo morate namestiti z izvornim paketom NestJS in želeno bazo podatkov SQL. SQLite je preprosta možnost brez namestitve.

Zaženite naslednji ukaz za namestitev TypeORM in njegovega izvirnega paketa NestJS z uporabo upravitelj paketov npm:

namestitev npm @nestjs/typeorm typeorm

Zaženite naslednji ukaz za namestitev SQLite:

npm namestite sqlite3

2. korak: Ustvarjanje entitete

Entiteta je zbirka polj, ki definirajo podatke, shranjene v bazi podatkov. TypeORM uporablja datoteko entitete za ustvarjanje tabele v vaši bazi podatkov.

instagram viewer

Če želite ustvariti entiteto, sledite spodnjim korakom:

  1. Ustvarite datoteko v svojem aplikacijskem modulu in jo poimenujte po konvenciji o poimenovanju NestJS (.entity.ts).
  2. V datoteko entitete uvozite Entiteta, Stolpec, in PrimaryGeneratedColumn dekoraterji iz typeorm.
  3. V datoteki entitete ustvarite in izvozite razred.
  4. Napolnite razred z vrednostmi, ki jih želite v svoji bazi podatkov, na primer id, imeitd.
  5. Označite svoj razred entitete z dekoratorjem Entity. Zaradi tega je vaš razred TypeORM prepoznaven kot entiteta.
  6. Svojo lastnost ID označite z dekoratorjem PrimaryGeneratedColumn. To pove TypeORM, naj označi id kot primarni ključ in ga samodejno poveča.
  7. Označite preostale lastnosti z dekoratorjem stolpcev. To jih doda kot stolpce v vaši bazi podatkov.

Na primer:

// src/test/test.entity.ts
uvoz {Entity, Column, PrimaryGeneratedColumn} od 'typeorm';

@Entiteta()
izvozrazredTest{
@PrimaryGeneratedColumn()
ID številka;

@Stolpec()
lastnost_1: niz;

@Stolpec()
lastnost_2: niz;

@Stolpec()
lastnost_3: niz;
}

Zgornja datoteka entitete ustvari to tabelo v vaši bazi podatkov:

test
id int (11) PRIMARNI KLJUČ AUTO_INCREMENT
lastnina_1 varchar (255)
lastnina_2 varchar (255)
lastnina_3 varchar (255)

The Dokumentacija TypeORM podrobneje pokriva subjekte.

3. korak: Povezovanje aplikacije z zbirko podatkov

Zdaj, ko je vaša entiteta nastavljena, boste morali svojo aplikacijo povezati z bazo podatkov. Ta primer uporablja SQLite.

Za povezavo aplikacije z bazo podatkov sledite spodnjim korakom:

  1. V korenskem modulu vaših aplikacij (običajno app.module.ts datoteko), uvoz TypeOrmModule od @nestjs/typeorm.
  2. V isto datoteko uvozite vse svoje entitete.
  3. V uvoz niz, pokličite zaRoot metoda na TypeOrmModule. Metoda forRoot deli povezavo z bazo podatkov prek vseh modulov v vaši aplikaciji.
  4. Posredujte prazen predmet kot argument v metodo forRoot; to bo konfiguracijski objekt TypeORM.
  5. Dodajte lastnino, vrsto, v konfiguracijski objekt in ga nastavite na “sqlite”. Lastnost tipa označuje ime baze podatkov, ki jo uporabljate.
  6. Dodajte drugo lastnost, zbirka podatkov, v konfiguracijski objekt in ga nastavite na “test.db”. Lastnost baze podatkov označuje vaše želeno ime za vašo bazo podatkov.
  7. Dodajte drugo lastnost, entitete, v konfiguracijski objekt in ga nastavite na prazno polje. Napolnite prazno matriko z entitetami, ki ste jih prej uvozili.
  8. Dodajte drugo lastnost, sinhroniziratiin ga nastavite prav; ta lastnost sinhronizira vaše entitete z vašo bazo podatkov in jo posodobi vsakič, ko zaženete kodo. To lastnost bi morali nastaviti samo na prav v razvoju. Med proizvodnjo ga morate nastaviti na lažno da preprečite izgubo podatkov.
// src/app.module.ts
uvoz { Modul } od '@nestjs/skupno';
uvoz { TypeOrmModule } od '@nestjs/typeorm';
uvoz { Test } od './test/test.entity';
uvoz {Entity2} od './entity/entity.entity';
uvoz { TestModule } od './test/test.module';

@Modul({
uvoz: [
TypeOrmModule.forRoot({
vrsta: 'sqlite',
baza podatkov: 'test.db',
entitete: [Test, Entity2],
sinhroniziraj: prav, //samo za razvoj
}),
TestModule,
],
krmilniki: [],
ponudniki: [],
})
izvozrazredAppModule{}

4. korak: Ustvarjanje repozitorija

Repozitorij je dostopna plast entitete, ki se uporablja za poizvedbe (vstavljanje, brisanje, shranjevanje, iskanje itd.) v tabeli, ki jo ustvari entiteta v bazi podatkov. TypeORM podpira vzorec oblikovanja repozitorija, zato ima vsaka entiteta svoje repozitorij.

TypeORM samodejno ustvari repozitorij za vašo entiteto, ko sledite spodnjim korakom:

  1. V datoteko modula vaše entitete uvozite TypeOrmModule od @nestjs/typeorm in uvozite svojo entiteto.
  2. Ustvarite uvoz niz v @Modul dekorater.
  3. V matriki uvozov pokličite forFeature metoda na TypeOrmModule.
  4. Posredujte matriko kot argument v svoj in matriko napolnite s svojo entiteto.
// src/test/test.module.ts
uvoz { Modul } od '@nestjs/skupno';
uvoz { TypeOrmModule } od '@nestjs/typeorm';
uvoz { TestController } od './test.controller';
uvoz { TestService } od './test.service';
uvoz { Test } od './test.entity';

@Modul({
uvoz: [TypeOrmModule.forFeature([Test])],
ponudniki: [TestService],
krmilniki: [TestController],
})

5. korak: Vstavljanje vašega repozitorija v njegovo storitev z uporabo vbrizgavanja odvisnosti

Vstavljanje odvisnosti je tehnika programskega inženiringa, ki je oblika načela inverzije nadzora. Prenese breme upravljanja odvisnosti s kode odjemalca na knjižnico ali storitev, od katere je odvisna.

Sledite spodnjim korakom, da svoje skladišče vstavite v storitev:

  1. V servisni datoteki uvozite Repozitorij od typeorm in InjectRepository dekorater iz @nestjs/typeorm. Uvozite tudi entiteto, ki ji želite vstaviti repozitorij.
  2. V svojem servisnem razredu ustvarite a konstruktor.
  3. Razglasi a zasebno spremenljivka, repo, kot parameter v konstruktorju za njegovo inicializacijo.
  4. Dodelite vrsto repozitorija repoju z generično vrsto vaše entitete.
  5. Označite repo z dekoratorjem InjectRepository in posredujte svojo entiteto kot argument.
// test.service.ts
uvoz { Za injiciranje } od '@nestjs/skupno';
uvoz {Repozitorij} od 'typeorm';
uvoz {InjectRepository} od '@nestjs/typeorm';
uvoz { Test } od './test.entity';

@Za injiciranje()
izvozrazredTestService{
konstruktor(
@InjectRepository(test)
zasebni repo: Repozitorij<Test>,
) {}
}

Zdaj, ko je nastavitev končana, lahko naredite SQL poizvedbe na njem za pridobivanje ali spreminjanje podatkov.

Izdelava poizvedb SQL s TypeORM

Izvedete lahko katero koli preprosto poizvedbo SQL, tako da pokličete metode repozitorija TypeORM na repo spremenljivko znotraj vašega storitvenega razreda. Ustvarite lahko tudi zapletene poizvedbe SQL z graditeljem poizvedb TypeORM.