Objektu relāciju kartētājs (ORM) ir bibliotēka, kas ievieš objektu relāciju kartēšanas paņēmienu. Tas ļauj rakstīt SQL datu bāzes vaicājumus, izmantojot vēlamās valodas objektorientēto paradigmu.

TypeORM ir TypeScript ORM, kas ļoti atvieglo saskarni ar dažādām datu bāzēm. Tas darbojas ar SQL datu bāzēm, bet arī lieliski saskaras ar NoSQL datu bāzēm, piemēram, MongoDB.

NestJS nodrošina augsta līmeņa atbalstu TypeORM jau sākotnēji. Īpašā TypeORM pakotne padara integrāciju salīdzinoši vienkāršu.

1. darbība: atkarību instalēšana

Pirms TypeORM izmantošanas NestJS lietojumprogrammā, tā ir jāinstalē kopā ar tās vietējo NestJS pakotni un vēlamo SQL datu bāzi. SQLite ir vienkārša iespēja bez instalēšanas.

Palaidiet šo komandu, lai instalētu TypeORM un tā vietējo NestJS pakotni, izmantojot npm pakotņu pārvaldnieks:

npm instalēšana @nestjs/typeorm typeorm

Lai instalētu SQLite, palaidiet šo komandu:

npm uzstādīt sqlite3

2. darbība: entītijas izveide

Entītija ir lauku kopums, kas nosaka datubāzē glabātos datus. TypeORM izmanto entītijas failu, lai izveidotu tabulu jūsu datu bāzē.

instagram viewer

Lai izveidotu entītiju, veiciet tālāk norādītās darbības.

  1. Izveidojiet failu savā lietojumprogrammas modulī un piešķiriet tam nosaukumu, ievērojot NestJS nosaukšanas principu (.entity.ts).
  2. Savā entītijas failā importējiet Vienība, Kolonna, un PrimaryGeneratedColumn dekoratori no tipa forma.
  3. Entītijas failā izveidojiet un eksportējiet klasi.
  4. Aizpildiet klasi ar vērtībām, kuras vēlaties savā datu bāzē, piemēram, id, nosaukumsutt.
  5. Anotējiet savu entītijas klasi, izmantojot entītiju dekorētāju. Tas padara jūsu klasi atpazīstamu TypeORM kā entītiju.
  6. Anotējiet savu ID īpašumu, izmantojot PrimaryGeneratedColumn dekorētāju. Tas liek TypeORM atzīmēt id kā primāro atslēgu un automātiski to palielināt.
  7. Anotējiet atlikušos rekvizītus, izmantojot kolonnu dekorētāju. Tādējādi tie tiek pievienoti kā kolonnas jūsu datubāzē.

Piemēram:

// src/test/test.entity.ts
imports { Entity, Column, PrimaryGeneratedColumn } no 'typeform';

@Entity()
eksportētklasēPārbaude{
@PrimaryGeneratedColumn()
ID numurs;

@Kolonna()
rekvizīts_1: virkne;

@Kolonna()
īpašība_2: virkne;

@Kolonna()
īpašība_3: virkne;
}

Iepriekš esošais entītijas fails jūsu datu bāzē izveido šo tabulu:

pārbaude
id starp (11) PRIMĀRĀ ATSLĒGA AUTO_INCREMENT
īpašums_1 varchar (255)
īpašums_2 varchar (255)
īpašums_3 varchar (255)

The TypeORM dokumentācija attiecas uz entītijām sīkāk.

3. darbība: lietojumprogrammas savienošana ar datu bāzi

Tagad, kad jūsu entītija ir iestatīta, jums būs jāsavieno lietojumprogramma ar datu bāzi. Šajā piemērā tiek izmantots SQLite.

Lai lietojumprogrammu savienotu ar datu bāzi, veiciet tālāk norādītās darbības.

  1. Jūsu lietojumprogrammu saknes modulī (parasti app.module.ts fails), importēt TypeOrmModule no @nestjs/typeorm.
  2. Tajā pašā failā importējiet visas entītijas.
  3. Iekš imports masīvs, zvaniet uz forRoot metodi TypeOrmModule. ForRoot metode koplieto datu bāzes savienojumu, izmantojot visus jūsu lietojumprogrammas moduļus.
  4. Nodod tukšu objektu kā argumentu forRoot metodē; tas būs TypeORM konfigurācijas objekts.
  5. Pievienot īpašumu, veids, uz konfigurācijas objektu un iestatiet to uz "sqlite". Tipa rekvizīts apzīmē izmantotās datu bāzes nosaukumu.
  6. Pievienojiet citu īpašumu, datu bāze, uz konfigurācijas objektu un iestatiet to uz “test.db”. Datubāzes rekvizīts apzīmē jūsu datu bāzes vēlamo nosaukumu.
  7. Pievienojiet citu īpašumu, entītijām, uz konfigurācijas objektu un iestatiet to uz tukšu masīvu. Aizpildiet tukšo masīvu ar iepriekš importētajām entītijām.
  8. Pievienojiet citu īpašumu, sinhronizētun iestatiet to taisnība; šis rekvizīts sinhronizē jūsu entītijas ar jūsu datu bāzi un atjaunina to katru reizi, kad palaižat kodu. Šis rekvizīts ir jāiestata tikai uz taisnība attīstībā. Ražošanas laikā jums tas jāiestata uz viltus lai izvairītos no datu zuduma.
// src/app.module.ts
imports { Modulis } no '@nestjs/common';
imports { TypeOrmModule } no '@nestjs/typeorm';
imports { Pārbaude } no './test/test.entity';
imports { Entity2 } no './entity/entity.entity';
imports { TestModule } no './test/test.module';

@Modulis({
imports: [
TypeOrmModule.forRoot({
veids: 'sqlite',
datu bāze: 'test.db',
entītijām: [Tests, Entity2],
sinhronizēt: taisnība, //tikai izstrāde
}),
Testa modulis,
],
kontrolieri: [],
pakalpojumu sniedzēji: [],
})
eksportētklasēAppModule{}

4. darbība. Repozitorija izveide

Repozitorijs ir entītijas piekļuves slānis, ko izmanto, lai veiktu vaicājumus (ievietot, dzēst, saglabāt, atrast utt.) tabulā, ko entītija izveidojusi datu bāzē. TypeORM atbalsta repozitorija dizaina modeli, tāpēc katrai entītijai ir savs repozitorijs.

TypeORM automātiski izveido repozitoriju jūsu entītijai, kad veicat tālāk norādītās darbības.

  1. Importējiet savas entītijas moduļa failā TypeOrmModule no @nestjs/typeorm un importējiet savu entītiju.
  2. Izveidojiet an imports masīvs sadaļā @Modulis dekorators.
  3. Importēšanas masīvā zvaniet uz funkcijai metodi TypeOrmModule.
  4. Nododiet masīvu kā argumentu savā un aizpildiet masīvu ar savu entītiju.
// src/test/test.module.ts
imports { Modulis } no '@nestjs/common';
imports { TypeOrmModule } no '@nestjs/typeorm';
imports { TestController } no './test.controller';
imports { TestService } no './test.service';
imports { Pārbaude } no './test.entity';

@Modulis({
imports: [TypeOrmModule.forFeature([Pārbaude])],
pakalpojumu sniedzēji: [TestService],
kontrolieri: [TestController],
})

5. darbība. Repozitorija ievadīšana tā pakalpojumā, izmantojot atkarības injekciju

Atkarības injekcija ir programmatūras inženierijas paņēmiens, kas ir kontroles principa inversijas veids. Tas pārceļ atkarības pārvaldības slogu no klienta koda uz bibliotēku vai pakalpojumu, no kura tas ir atkarīgs.

Veiciet tālāk norādītās darbības, lai ievadītu savu repozitoriju pakalpojumā:

  1. Pakalpojuma failā importējiet Repozitorijs no tipa forma un InjectRepository dekorators no @nestjs/typeorm. Importējiet arī entītiju, kurai vēlaties ievadīt tās repozitoriju.
  2. Savā pakalpojumu klasē izveidojiet a konstruktors.
  3. Paziņot a Privāts mainīgs, repo, kā parametru konstruktorā, lai to inicializētu.
  4. Piešķiriet repozitorija veidu repo ar vispārīgu savas entītijas veidu.
  5. Anotējiet repo, izmantojot InjectRepository dekoratoru, un norādiet savu entītiju kā argumentu.
// test.service.ts
imports {Injicējams} no '@nestjs/common';
imports { Repozitorijs } no 'typeform';
imports { InjectRepository } no '@nestjs/typeorm';
imports { Pārbaude } no './test.entity';

@Injicējams()
eksportētklasēTestService{
konstruktors(
@InjectRepository(Pārbaude)
privātais repo: Repozitorijs<Pārbaude>,
) {}
}

Tagad, kad iestatīšana ir pabeigta, varat to izdarīt SQL vaicājumi uz tā, lai izgūtu vai modificētu datus.

SQL vaicājumu veikšana, izmantojot TypeORM

Varat veikt jebkuru vienkāršu SQL vaicājumu, izsaucot TypeORM repozitorija metodes vietnē repo mainīgs jūsu pakalpojumu klasē. Varat arī izveidot sarežģītus SQL vaicājumus, izmantojot TypeORM vaicājumu veidotāju.