Object-Relational Mapper (ORM) on kirjasto, joka toteuttaa Object-Relational -kartoitustekniikkaa. Tämän avulla voit kirjoittaa SQL-tietokantakyselyitä käyttämällä haluamasi kielen olioparadigmaa.
TypeORM on TypeScript ORM, joka tekee liittymästä eri tietokantoihin erittäin helppoa. Se toimii SQL-tietokantojen kanssa, mutta on myös hienosti liitettynä NoSQL-tietokantoihin, kuten MongoDB.
NestJS tarjoaa korkean tason tuen TypeORM: lle heti valmiina. Erillinen TypeORM-paketti tekee integroinnista suhteellisen helppoa.
Vaihe 1: Riippuvuuksien asentaminen
Ennen kuin käytät TypeORM: ia NestJS-sovelluksessa, sinun on asennettava se alkuperäisen NestJS-paketin ja ensisijaisen SQL-tietokannan kanssa. SQLite on yksinkertainen, asennusvapaa vaihtoehto.
Asenna TypeORM ja sen alkuperäinen NestJS-paketti suorittamalla seuraava komento käyttämällä npm-pakettien hallinta:
npm asennus @nestjs/typeorm typeorm
Asenna SQLite suorittamalla seuraava komento:
npm Asentaa sqlite3
Vaihe 2: Kokonaisuuden luominen
Entiteetti on kokoelma kenttiä, jotka määrittelevät tietokantaan tallennetut tiedot. TypeORM käyttää entiteettitiedostoa luodakseen taulukon tietokantaan.
Luo kokonaisuus noudattamalla alla olevia ohjeita:
- Luo tiedosto sovellusmoduuliisi ja nimeä se NestJS-nimeämiskäytännön mukaisesti (
.entity.ts ). - Tuo entiteettitiedostossasi Entiteetti, Sarake, ja PrimaryGeneratedColumn sisustajat alkaen typeform.
- Luo ja vie luokka entiteettitiedostossasi.
- Täytä luokka arvoilla, jotka haluat tietokantaasi, kuten id, nimi, jne.
- Merkitse entiteettiluokkasi Entity Decoratorilla. Tämä tekee luokkastasi tunnistettavissa TypeORM: lle kokonaisuutena.
- Merkitse tunnusomaisuutesi PrimaryGeneratedColumn-koristelijalla. Tämä käskee TypeORM: ia merkitsemään id ensisijaiseksi avaimeksi ja lisää sitä automaattisesti.
- Merkitse loput ominaisuudet sarakekoristelijalla. Tämä lisää ne sarakkeiksi tietokantaasi.
Esimerkiksi:
// src/test/test.entity.ts
tuonti { Entity, Column, PrimaryGeneratedColumn } alkaen 'tyyppimuoto';@Entiteetti()
viedäluokkaaTestata{
@PrimaryGeneratedColumn()
id: numero;@Sarake()
ominaisuus_1: merkkijono;@Sarake()
ominaisuus_2: merkkijono;
@Sarake()
ominaisuus_3: merkkijono;
}
Yllä oleva entiteettitiedosto luo tämän taulukon tietokantaan:
testata | ||
---|---|---|
id | väli (11) | ENSISIJAINEN AVAIN AUTO_INCREMENT |
omaisuus_1 | varchar (255) | |
omaisuus_2 | varchar (255) | |
omaisuus_3 | varchar (255) |
The TypeORM-dokumentaatio kattaa kokonaisuudet tarkemmin.
Vaihe 3: Sovelluksen yhdistäminen tietokantaan
Nyt kun entiteettisi on määritetty, sinun on yhdistettävä sovelluksesi tietokantaan. Tämä esimerkki käyttää SQLitea.
Liitä sovelluksesi tietokantaan noudattamalla alla olevia ohjeita:
- Sovelluksesi juurimoduulissa (yleensä app.module.ts tiedosto), tuonti TypeOrmModule alkaen @nestjs/typeorm.
- Tuo samassa tiedostossa kaikki entiteetit.
- Vuonna tuonti joukko, soita forRootille menetelmä TypeOrmModulessa. ForRoot-menetelmä jakaa tietokantayhteyden kaikkien sovelluksesi moduulien kautta.
- Anna tyhjä objekti argumenttina forRoot-metodiin; tämä on TypeORM-määritysobjekti.
- Lisää omaisuus, tyyppi, määritysobjektiin ja aseta se arvoon "sqlite". Tyyppiominaisuus ilmaisee käyttämäsi tietokannan nimen.
- Lisää toinen omaisuus, tietokanta, määritysobjektiin ja aseta se arvoon "testi.db". Tietokantaominaisuus ilmaisee tietokannan ensisijaisen nimen.
- Lisää toinen omaisuus, kokonaisuuksia, määritysobjektiin ja aseta se tyhjäksi taulukoksi. Täytä tyhjä taulukko aiemmin tuomillasi entiteeteillä.
- Lisää toinen omaisuus, synkronoidaja aseta se totta; Tämä ominaisuus synkronoi entiteetit tietokantaasi ja päivittää sen aina, kun suoritat koodin. Aseta tämä ominaisuus vain arvoon totta kehityksessä. Aseta se tuotannon aikana väärä tietojen häviämisen välttämiseksi.
// src/app.module.ts
tuonti { Moduuli } alkaen '@nestjs/common';
tuonti { TypeOrmModule } alkaen '@nestjs/typeorm';
tuonti { Testi } alkaen './test/test.entity';
tuonti { Entity2 } alkaen './entity/entity.entity';
tuonti { TestModule } alkaen './test/test.module';
@Moduuli({
tuonti: [
TypeOrmModule.forRoot({
tyyppi: 'sqlite',
tietokanta: 'testi.db',
kokonaisuuksia: [Testi, Entity2],
synkronoida: totta, //vain kehitys
}),
Testimoduuli,
],
ohjaimia: [],
tarjoajat: [],
})
viedäluokkaaAppModule{}
Vaihe 4: Arkiston luominen
Arkisto on entiteetin käyttöoikeustaso, jota käytetään kyselyjen tekemiseen (lisää, poista, tallenna, etsi jne.) entiteetin tietokannassa luomaan taulukkoon. TypeORM tukee arkiston suunnittelumallia, joten jokaisella entiteetillä on oma arkisto.
TypeORM luo automaattisesti arkiston entiteetille, kun noudatat seuraavia vaiheita:
- Tuo entiteettisi moduulitiedostossa TypeOrmModule alkaen @nestjs/typeorm ja tuo entiteettisi.
- Luo an tuonti joukko sisällä @Moduuli sisustusarkkitehti.
- Soita tuontitaulukossa ominaisuus menetelmä TypeOrmModulessa.
- Anna taulukko argumenttina omaan ja täytä taulukko entiteetilläsi.
// src/test/test.module.ts
tuonti { Moduuli } alkaen '@nestjs/common';
tuonti { TypeOrmModule } alkaen '@nestjs/typeorm';
tuonti { TestController } alkaen './test.controller';
tuonti { Testipalvelu } alkaen './test.service';
tuonti { Testi } alkaen './test.entity';
@Moduuli({
tuonti: [TypeOrmModule.forFeature([Testi])],
tarjoajat: [Testipalvelu],
ohjaimia: [TestController],
})
Vaihe 5: Tietovaraston lisääminen palveluun Dependency Injectionin avulla
Riippuvuusinjektio on ohjelmistosuunnittelutekniikka, joka on eräänlainen ohjauksen käänteisperiaatteen muoto. Se siirtää riippuvuuden hallinnan taakkaa asiakaskoodista kirjastoon tai palveluun, josta se riippuu.
Lisää arkisto palveluun noudattamalla alla olevia ohjeita:
- Tuo palvelutiedostossasi Arkisto alkaen typeform ja InjectRepository sisustaja alkaen @nestjs/typeorm. Tuo myös entiteetti, johon haluat lisätä sen arkiston.
- Luo palveluluokkaasi a rakentaja.
- Ilmoita a yksityinen muuttuva, repo, parametrina rakentajassa sen alustamiseksi.
- Määritä arkiston tyyppi repoa varten kokonaisuutesi yleisellä tyypillä.
- Merkitse repo InjectRepository-sisällöllä ja anna entiteettisi argumenttina.
// test.service.ts
tuonti { Injektoitava } alkaen '@nestjs/common';
tuonti { Arkisto } alkaen 'tyyppimuoto';
tuonti { InjectRepository } alkaen '@nestjs/typeorm';
tuonti { Testi } alkaen './test.entity';
@Injektoitava()
viedäluokkaaTestipalvelu{
rakentaja(
@InjectRepository(Testata)
yksityinen repo: Arkisto<Testata>,
) {}
}
Nyt kun asetukset on tehty, voit tehdä sen SQL-kyselyt siihen tietojen hakemiseksi tai muokkaamiseksi.
SQL-kyselyiden tekeminen TypeORM: llä
Voit tehdä minkä tahansa yksinkertaisen SQL-kyselyn kutsumalla TypeORM: n arkistomenetelmiä repo muuttuva palveluluokkasi sisällä. Voit myös luoda monimutkaisia SQL-kyselyitä käyttämällä TypeORM: n kyselynrakennustyökalua.