Az Object-Relational Mapper (ORM) egy olyan könyvtár, amely megvalósítja az objektum-relációs leképezési technikát. Ez lehetővé teszi, hogy SQL adatbázis-lekérdezéseket írjon a preferált nyelv objektumorientált paradigmájával.
A TypeORM egy TypeScript ORM, amely nagyon egyszerűvé teszi a különféle adatbázisokkal való interfészt. Működik SQL-adatbázisokkal, de jól illeszkedik a NoSQL-adatbázisokhoz is, például a MongoDB-hez.
A NestJS magas szintű támogatást nyújt a TypeORM-hez már készen is. A dedikált TypeORM csomag viszonylag egyszerűvé teszi az integrációt.
1. lépés: Függőségek telepítése
Mielőtt a TypeORM-ot egy NestJS-alkalmazásban használná, telepítenie kell azt a natív NestJS-csomagjával és az előnyben részesített SQL-adatbázissal. Az SQLite egy egyszerű, telepítés nélküli lehetőség.
Futtassa a következő parancsot a TypeORM és natív NestJS-csomagjának telepítéséhez a használatával az npm csomagkezelőt:
npm telepítés @nestjs/typeorm typeorm
Futtassa a következő parancsot az SQLite telepítéséhez:
npm telepítés sqlite3
2. lépés: Entitás létrehozása
Az entitás az adatbázisban tárolt adatokat meghatározó mezők gyűjteménye. A TypeORM az entitásfájlt használja egy tábla létrehozásához az adatbázisban.
Entitás létrehozásához kövesse az alábbi lépéseket:
- Hozzon létre egy fájlt az alkalmazásmodulban, és nevezze el a NestJS elnevezési konvenciója szerint (
.entity.ts ). - Az entitásfájlban importálja a Entitás, Oszlop, és PrimaryGeneratedColumn lakberendezők től typeorm.
- Az entitásfájlban hozzon létre és exportáljon egy osztályt.
- Töltse fel az osztályt azokkal az értékekkel, amelyeket az adatbázisában szeretne, például id, névstb.
- Jegyezze fel entitásosztályát az Entitásdekorátorral. Ezáltal az osztály egy entitásként felismerhetővé válik a TypeORM számára.
- Jegyezze fel azonosító tulajdonságát a PrimaryGeneratedColumn dekorátorral. Ez arra utasítja a TypeORM-ot, hogy jelölje meg a id elsődleges kulcsként, és automatikusan növelje azt.
- Jegyezze fel a fennmaradó tulajdonságokat az Oszlopdekorátorral. Ez oszlopokként adja hozzá őket az adatbázishoz.
Például:
// src/test/test.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } tól től 'typeorm';@Entity()
exportosztályTeszt{
@PrimaryGeneratedColumn()
személyi igazolvány száma;@Oszlop()
property_1: string;@Oszlop()
property_2: string;
@Oszlop()
property_3: string;
}
A fenti entitásfájl létrehozza ezt a táblázatot az adatbázisban:
teszt | ||
---|---|---|
id | int (11) | ELSŐDLEGES KULCS AUTO_INCREMENT |
property_1 | varchar (255) | |
tulajdonság_2 | varchar (255) | |
tulajdonság_3 | varchar (255) |
Az TypeORM dokumentáció részletesebben lefedi az entitásokat.
3. lépés: Az alkalmazás összekapcsolása egy adatbázissal
Most, hogy az entitás be van állítva, csatlakoztatnia kell az alkalmazást egy adatbázishoz. Ez a példa az SQLite-ot használja.
Kövesse az alábbi lépéseket az alkalmazás adatbázishoz való csatlakoztatásához:
- Az alkalmazások gyökérmoduljában (általában a app.module.ts fájl), importálás TypeOrmModule tól től @nestjs/typeorm.
- Ugyanabban a fájlban importálja az összes entitást.
- Ban,-ben behozatal tömb, hívja a forRoot módszer a TypeOrmModule-on. A forRoot metódus megosztja az adatbázis-kapcsolatot az alkalmazás összes modulján keresztül.
- Adjon át egy üres objektumot argumentumként a forRoot metódusba; ez lesz a TypeORM konfigurációs objektum.
- ingatlan hozzáadása, típus, a konfigurációs objektumhoz, és állítsa be "sqlite". A type tulajdonság a használt adatbázis nevét jelöli.
- Új ingatlan hozzáadása, adatbázis, a konfigurációs objektumhoz, és állítsa be "teszt.db". Az adatbázis tulajdonság az adatbázis előnyben részesített nevét jelöli.
- Új ingatlan hozzáadása, entitások, a konfigurációs objektumhoz, és állítsa be egy üres tömbbe. Töltse fel az üres tömböt a korábban importált entitásokkal.
- Új ingatlan hozzáadása, szinkronizálni, és állítsa be igaz; ez a tulajdonság szinkronizálja az entitásokat az adatbázissal, és minden alkalommal frissíti, amikor futtatja a kódot. Ezt a tulajdonságot csak erre kell beállítani igaz fejlesztés alatt. A gyártás során be kell állítani hamis az adatvesztés elkerülése érdekében.
// src/app.module.ts
import { Modul } tól től '@nestjs/common';
import { TypeOrmModule } tól től '@nestjs/typeorm';
import { Teszt } tól től './test/test.entity';
import { Entitás2 } tól től './entity/entity.entity';
import { TestModule } tól től './test/test.module';
@Modul({
import: [
TypeOrmModule.ForRoot({
típus: 'sqlite',
adatbázis: 'teszt.db',
entitások: [Teszt, entitás2],
szinkronizálni: igaz, //csak fejlesztés
}),
tesztmodul,
],
vezérlők: [],
szolgáltatók: [],
})
exportosztályAppModule{}
4. lépés: Adattár létrehozása
A repository egy entitás hozzáférési rétege, amellyel lekérdezéseket hajthat végre (beszúrás, törlés, mentés, keresés stb.) az entitás által az adatbázisban létrehozott táblán. A TypeORM támogatja a lerakattervezési mintát, így minden entitásnak saját lerakata van.
A TypeORM automatikusan létrehoz egy adattárat az entitás számára, ha követi az alábbi lépéseket:
- Az entitás modulfájljában importálja TypeOrmModule tól től @nestjs/typeorm és importálja az entitást.
- Hozzon létre egy behozatal tömb a @Modul lakberendező.
- Az importálási tömbben hívja meg a forFeature módszer a TypeOrmModule-on.
- Adj át egy tömböt argumentumként a sajátodba, és töltsd fel a tömböt az entitásoddal.
// src/test/test.module.ts
import { Modul } tól től '@nestjs/common';
import { TypeOrmModule } tól től '@nestjs/typeorm';
import { TestController } tól től './test.controller';
import { Tesztszolgáltatás } tól től './test.service';
import { Teszt } tól től './test.entity';
@Modul({
behozatal: [TypeOrmModule.forFeature([Teszt])],
szolgáltatók: [TestService],
vezérlők: [TestController],
})
5. lépés: Az adattár beillesztése a szolgáltatásba a Dependency Injection használatával
A függőségi befecskendezés egy szoftverfejlesztési technika, amely a vezérlés megfordításának egyik formája. Ez áthelyezi a függőségek kezelésének terhét az ügyfélkódról arra a könyvtárra vagy szolgáltatásra, amelytől függ.
Kövesse az alábbi lépéseket a tárhely szolgáltatásba való beillesztéséhez:
- A szolgáltatásfájlban importálja Adattár tól től typeorm és a InjectRepository lakberendező től @nestjs/typeorm. Importálja azt az entitást is, amelybe be szeretné illeszteni a lerakat.
- A szolgáltatási osztályban hozzon létre a konstruktőr.
- Nyilatkozni a magán változó, repo, paraméterként a konstruktorban az inicializáláshoz.
- Rendeljen hozzá egy típusú tárat a repohoz az entitás általános típusával.
- Annotálja a repót az InjectRepository dekorátorral, és adja át az entitást argumentumként.
// test.service.ts
import { Injekciós } tól től '@nestjs/common';
import { Repository } tól től 'typeorm';
import { InjectRepository } tól től '@nestjs/typeorm';
import { Teszt } tól től './test.entity';
@Injektálható()
exportosztályTesztszolgáltatás{
konstruktőr(
@InjectRepository(Teszt)
privát repo: Repository<Teszt>,
) {}
}
Most, hogy a beállítás befejeződött, megteheti SQL lekérdezések az adatok lekéréséhez vagy módosításához.
SQL lekérdezések készítése TypeORM segítségével
Bármilyen egyszerű SQL-lekérdezést készíthet a TypeORM repository metódusainak meghívásával a repo változó a szolgáltatási osztályán belül. A TypeORM lekérdezéskészítőjének használatával összetett SQL-lekérdezéseket is létrehozhat.