Objektų santykio žemėlapių sudarytojas (ORM) yra biblioteka, įgyvendinanti objektų ir santykių atvaizdavimo techniką. Tai leidžia rašyti SQL duomenų bazės užklausas naudojant pageidaujamos kalbos objektinę paradigmą.

TypeORM yra TypeScript ORM, kuris labai palengvina sąsają su įvairiomis duomenų bazėmis. Jis veikia su SQL duomenų bazėmis, bet taip pat puikiai susieja su NoSQL duomenų bazėmis, tokiomis kaip MongoDB.

„NestJS“ teikia aukšto lygio „TypeORM“ palaikymą. Specialus „TypeORM“ paketas palengvina integravimą.

1 veiksmas: Priklausomybių diegimas

Prieš naudodami „TypeORM“ „NestJS“ programoje, turite ją įdiegti su savo „NestJS“ paketu ir pageidaujama SQL duomenų baze. SQLite yra paprasta, neįdiegta parinktis.

Vykdykite šią komandą, kad įdiegtumėte TypeORM ir jo vietinį NestJS paketą naudodami npm paketų tvarkyklė:

npm diegimas @nestjs/typeorm typeorm

Norėdami įdiegti SQLite, paleiskite šią komandą:

npm diegti sqlite3

2 veiksmas: objekto kūrimas

Objektas yra laukų rinkinys, apibrėžiantis duomenų bazėje saugomus duomenis. TypeORM naudoja objekto failą, kad sukurtų lentelę jūsų duomenų bazėje.

instagram viewer

Norėdami sukurti objektą, atlikite toliau nurodytus veiksmus.

  1. Sukurkite failą programos modulyje ir pavadinkite jį pagal NestJS pavadinimų suteikimo tvarką (.entity.ts).
  2. Į savo objekto failą importuokite Esybė, Stulpelis, ir PrimaryGeneratedColumn dekoratoriai iš tipo forma.
  3. Esybės faile sukurkite ir eksportuokite klasę.
  4. Užpildykite klasę vertėmis, kurias norite įtraukti į savo duomenų bazę, pvz., id, vardasir kt.
  5. Komentuokite savo objekto klasę naudodami objekto dekoratorių. Tai leidžia TypeORM atpažinti jūsų klasę kaip objektą.
  6. Komentuokite savo ID nuosavybę naudodami „PrimaryGeneratedColumn“ dekoratorių. Tai nurodo TypeORM pažymėti id kaip pirminį raktą ir automatiškai jį padidinkite.
  7. Komentuokite likusias savybes naudodami stulpelio dekoratorių. Tai prideda juos kaip stulpelius jūsų duomenų bazėje.

Pavyzdžiui:

// src/test/test.entity.ts
importuoti { Entity, Column, PrimaryGeneratedColumn } „tipo forma“;

@Subjektas()
eksportuotiklasėTestas{
@PrimaryGeneratedColumn()
asmens tapatybės dokumento numeris;

@Stulpelis()
nuosavybė_1: eilutė;

@Stulpelis()
nuosavybė_2: eilutė;

@Stulpelis()
property_3: string;
}

Aukščiau pateiktas objekto failas sukuria šią lentelę jūsų duomenų bazėje:

bandymas
id tarpinis (11) PIRMINIS RAKTAS AUTO_INCREMENT
nuosavybė_1 varcharas (255)
nuosavybė_2 varcharas (255)
nuosavybė_3 varcharas (255)

The TypeORM dokumentacija išsamiau apima subjektus.

3 veiksmas: prijunkite programą prie duomenų bazės

Dabar, kai jūsų objektas yra nustatytas, turėsite prijungti programą prie duomenų bazės. Šiame pavyzdyje naudojama SQLite.

Norėdami prijungti programą prie duomenų bazės, atlikite toliau nurodytus veiksmus.

  1. Jūsų programų šakniniame modulyje (paprastai app.module.ts failą), importuoti TypeOrmModule@nestjs/typeorm.
  2. Tame pačiame faile importuokite visus objektus.
  3. Viduje importas masyvas, skambinkite forRoot metodas TypeOrmModule. ForRoot metodas bendrina duomenų bazės ryšį per visus jūsų programos modulius.
  4. Perduokite tuščią objektą kaip argumentą į forRoot metodą; tai bus TypeORM konfigūracijos objektas.
  5. Pridėti nuosavybę, tipo, į konfigūracijos objektą ir nustatykite jį į "sqlite". Tipo ypatybė nurodo jūsų naudojamos duomenų bazės pavadinimą.
  6. Pridėti kitą nuosavybę, duomenų bazėje, į konfigūracijos objektą ir nustatykite jį į „testas.db“. Duomenų bazės ypatybė nurodo pageidaujamą duomenų bazės pavadinimą.
  7. Pridėti kitą nuosavybę, subjektai, į konfigūracijos objektą ir nustatykite jį į tuščią masyvą. Užpildykite tuščią masyvą anksčiau importuotais objektais.
  8. Pridėti kitą nuosavybę, sinchronizuotiir nustatykite tiesa; ši nuosavybė sinchronizuoja jūsų objektus su jūsų duomenų baze ir atnaujina ją kiekvieną kartą, kai paleidžiate kodą. Turėtumėte nustatyti tik šią nuosavybę tiesa plėtros. Gamybos metu turėtumėte jį nustatyti klaidinga kad būtų išvengta duomenų praradimo.
// src/app.module.ts
importuoti { Modulis } „@nestjs/common“;
importuoti { TypeOrmModule } '@nestjs/typeorm';
importuoti { Bandymas } './test/test.entity';
importuoti { Entity2 } './entity/entity.entity';
importuoti { TestModule } './test/test.module';

@Modulis({
importas: [
TypeOrmModule.Už Šaknį({
tipas: 'sqlite',
duomenų bazė: 'bandymas.db',
subjektai: [Test, Entity2],
sinchronizuoti: tiesa, //tik kūrimas
}),
TestModule,
],
valdikliai: [],
teikėjai: [],
})
eksportuotiklasėAppModule{}

4 veiksmas: saugyklos kūrimas

Saugykla yra objekto prieigos sluoksnis, naudojamas pateikti užklausoms (įterpti, ištrinti, išsaugoti, rasti ir pan.) objekto sukurtoje lentelėje duomenų bazėje. TypeORM palaiko saugyklos dizaino modelį, todėl kiekvienas objektas turi savo saugyklą.

TypeORM automatiškai sukuria jūsų objekto saugyklą, kai atliekate toliau nurodytus veiksmus.

  1. Importuokite objekto modulio faile TypeOrmModule@nestjs/typeorm ir importuoti savo subjektą.
  2. Sukurti an importas masyvas @Modulis dekoratorius.
  3. Importavimo masyve skambinkite forFeature metodas TypeOrmModule.
  4. Perduokite masyvą kaip argumentą į savo ir užpildykite masyvą savo esybe.
// src/test/test.module.ts
importuoti { Modulis } „@nestjs/common“;
importuoti { TypeOrmModule } '@nestjs/typeorm';
importuoti { TestController } './test.controller';
importuoti { TestService } './test.service';
importuoti { Bandymas } './test.entity';

@Modulis({
importas: [TypeOrmModule.forFeature([Test])],
teikėjai: [TestService],
valdikliai: [TestController],
})

5 veiksmas: savo saugyklos įkėlimas į jos paslaugą naudojant priklausomybės injekciją

Priklausomybės injekcija yra programinės įrangos inžinerijos metodas, kuris yra valdymo inversijos principo forma. Tai perkelia priklausomybės valdymo naštą nuo kliento kodo į biblioteką ar paslaugą, nuo kurios jis priklauso.

Atlikite toliau nurodytus veiksmus, kad įterptumėte saugyklą į paslaugą:

  1. Paslaugos faile importuokite Saugyklatipo forma ir InjectRepository dekoratorius iš @nestjs/typeorm. Taip pat importuokite objektą, kurio saugyklą norite įterpti.
  2. Savo paslaugų klasėje sukurkite a konstruktorius.
  3. Paskelbti a privatus kintamasis, atpirkimo sandoris, kaip parametrą konstruktoriuje, kad jį inicijuotų.
  4. Priskirkite saugyklos tipą atpirkimui su bendruoju savo objekto tipu.
  5. Komentuokite repo naudodami InjectRepository dekoratorių ir nurodykite savo objektą kaip argumentą.
// test.service.ts
importuoti { Injekcinis } „@nestjs/common“;
importuoti { Saugykla } „tipo forma“;
importuoti { InjectRepository } '@nestjs/typeorm';
importuoti { Bandymas } './test.entity';

@Injekcinis()
eksportuotiklasėBandymo paslauga{
konstruktorius(
@InjectRepository(testas)
privatus repo: saugykla<Testas>,
) {}
}

Dabar, kai sąranka baigta, galite tai padaryti SQL užklausos joje, kad gautumėte arba pakeistumėte duomenis.

SQL užklausų kūrimas naudojant TypeORM

Galite atlikti bet kokią paprastą SQL užklausą, iškviesdami TypeORM saugyklos metodus atpirkimo sandoris kintamasis jūsų paslaugų klasėje. Taip pat galite kurti sudėtingas SQL užklausas naudodami TypeORM užklausų kūrimo priemonę.