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.
Če želite ustvariti entiteto, sledite spodnjim korakom:
- Ustvarite datoteko v svojem aplikacijskem modulu in jo poimenujte po konvenciji o poimenovanju NestJS (
.entity.ts ). - V datoteko entitete uvozite Entiteta, Stolpec, in PrimaryGeneratedColumn dekoraterji iz typeorm.
- V datoteki entitete ustvarite in izvozite razred.
- Napolnite razred z vrednostmi, ki jih želite v svoji bazi podatkov, na primer id, imeitd.
- Označite svoj razred entitete z dekoratorjem Entity. Zaradi tega je vaš razred TypeORM prepoznaven kot entiteta.
- Svojo lastnost ID označite z dekoratorjem PrimaryGeneratedColumn. To pove TypeORM, naj označi id kot primarni ključ in ga samodejno poveča.
- 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:
- V korenskem modulu vaših aplikacij (običajno app.module.ts datoteko), uvoz TypeOrmModule od @nestjs/typeorm.
- V isto datoteko uvozite vse svoje entitete.
- V uvoz niz, pokličite zaRoot metoda na TypeOrmModule. Metoda forRoot deli povezavo z bazo podatkov prek vseh modulov v vaši aplikaciji.
- Posredujte prazen predmet kot argument v metodo forRoot; to bo konfiguracijski objekt TypeORM.
- Dodajte lastnino, vrsto, v konfiguracijski objekt in ga nastavite na “sqlite”. Lastnost tipa označuje ime baze podatkov, ki jo uporabljate.
- 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.
- Dodajte drugo lastnost, entitete, v konfiguracijski objekt in ga nastavite na prazno polje. Napolnite prazno matriko z entitetami, ki ste jih prej uvozili.
- 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:
- V datoteko modula vaše entitete uvozite TypeOrmModule od @nestjs/typeorm in uvozite svojo entiteto.
- Ustvarite uvoz niz v @Modul dekorater.
- V matriki uvozov pokličite forFeature metoda na TypeOrmModule.
- 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:
- V servisni datoteki uvozite Repozitorij od typeorm in InjectRepository dekorater iz @nestjs/typeorm. Uvozite tudi entiteto, ki ji želite vstaviti repozitorij.
- V svojem servisnem razredu ustvarite a konstruktor.
- Razglasi a zasebno spremenljivka, repo, kot parameter v konstruktorju za njegovo inicializacijo.
- Dodelite vrsto repozitorija repoju z generično vrsto vaše entitete.
- 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.