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:
- Napravite datoteku u svom aplikacijskom modulu i nazovite je prema NestJS konvenciji imenovanja (
.entitet.ts ). - U svoju datoteku entiteta uvezite Entitet, Stupac, i Primarni generirani stupac dekorateri iz typeorm.
- U svojoj datoteci entiteta stvorite i izvezite klasu.
- Napunite klasu vrijednostima koje želite u svojoj bazi podataka, npr iskaznica, Imeitd.
- Označite svoju klasu entiteta pomoću dekoratera entiteta. To čini vašu klasu prepoznatljivom za TypeORM kao entitet.
- Obilježite svoje svojstvo id-a dekoratorom PrimaryGeneratedColumn. Ovo govori TypeORM-u da označi iskaznica kao primarni ključ i automatski ga povećavati.
- 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:
- U korijenskom modulu vaših aplikacija (obično app.module.ts datoteka), uvoz TypeOrmModule iz @nestjs/typeorm.
- U istu datoteku uvezite sve svoje entitete.
- u uvozi niz, nazovite zaRoot metoda na TypeOrmModule. Metoda forRoot dijeli vezu s bazom podataka kroz sve module u vašoj aplikaciji.
- Proslijedite prazan objekt kao argument u metodu forRoot; ovo će biti TypeORM konfiguracijski objekt.
- Dodajte nekretninu, tip, u konfiguracijski objekt i postavite ga na “sqlite”. Svojstvo tipa označava naziv baze podataka koju koristite.
- 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.
- Dodajte drugu nekretninu, entiteta, u konfiguracijski objekt i postavite ga na prazan niz. Popunite prazan niz entitetima koje ste ranije uvezli.
- 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:
- U datoteci modula vašeg entiteta izvršite uvoz TypeOrmModule iz @nestjs/typeorm i uvezite svoj entitet.
- Stvorite uvozi niz u @Modul dekorater.
- U polju uvoza pozovite zaFeature metoda na TypeOrmModule.
- 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:
- 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.
- U svojoj klasi usluge stvorite a konstruktor.
- Izjaviti a privatni varijabla, repo, kao parametar u konstruktoru za njegovu inicijalizaciju.
- Dodijelite vrstu repozitorija repo-u s generičkom vrstom vašeg entiteta.
- 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.