ממפה יחסי אובייקטים (ORM) היא ספרייה המיישמת את טכניקת מיפוי היחסים בין אובייקטים. זה מאפשר לך לכתוב שאילתות מסד נתונים של SQL תוך שימוש בפרדיגמה מונחה עצמים של השפה המועדפת עליך.

TypeORM הוא TypeScript ORM שמקל מאוד על התממשקות עם מסדי נתונים שונים. זה עובד עם מסדי נתונים של SQL אבל גם מתממשק יפה עם מסדי נתונים של NoSQL כמו MongoDB.

NestJS מספקת תמיכה ברמה גבוהה עבור TypeORM מחוץ לקופסה. חבילת TypeORM הייעודית הופכת את האינטגרציה לקלה יחסית.

שלב 1: התקנת תלות

לפני השימוש ב-TypeORM ביישום NestJS, עליך להתקין אותו עם חבילת NestJS המקורית שלו ועם מסד הנתונים של SQL המועדף עליך. SQLite היא אפשרות פשוטה ללא התקנה.

הפעל את הפקודה הבאה כדי להתקין את TypeORM ואת חבילת NestJS המקורית שלה, באמצעות מנהל החבילות npm:

npm להתקין @nestjs/typeorm typeorm

הפעל את הפקודה הבאה כדי להתקין SQLite:

npm להתקין sqlite3

שלב 2: יצירת ישות

ישות היא אוסף של שדות המגדירים את הנתונים המאוחסנים במסד נתונים. TypeORM משתמש בקובץ הישות כדי ליצור טבלה במסד הנתונים שלך.

בצע את השלבים הבאים כדי ליצור ישות:

  1. צור קובץ במודול היישום שלך ושם לו בהתאם למוסכמות השמות של NestJS (.entity.ts).
  2. instagram viewer
  3. בקובץ הישות שלך, ייבא את ה יֵשׁוּת, טור, ו PrimaryGeneratedColumn מעצבים מ typorm.
  4. בקובץ הישות שלך, צור וייצא מחלקה.
  5. אכלס את הכיתה בערכים שאתה רוצה במסד הנתונים שלך, כמו תְעוּדַת זֶהוּת, שֵׁם, וכו.
  6. רשום את כיתת הישות שלך עם מעצב הישות. זה הופך את הכיתה שלך לזיהוי ל-TypeORM כישות.
  7. ציין הערות למאפיין המזהה שלך עם הדקורטור PrimaryGeneratedColumn. זה אומר ל-TypeORM לסמן את תְעוּדַת זֶהוּת כמפתח ראשי ולהגדיל אותו אוטומטית.
  8. ציין את המאפיינים הנותרים עם מעצב העמודים. זה מוסיף אותם כעמודות במסד הנתונים שלך.

לדוגמה:

// src/test/test.entity.ts
יְבוּא { ישות, עמודה, עמודה נוצרת ראשונית } מ 'טיפוס';

@יֵשׁוּת()
יְצוּאמעמדמִבְחָן{
@PrimaryGeneratedColumn()
מספר תעודת זהות;

@טור()
property_1: מחרוזת;

@טור()
property_2: מחרוזת;

@טור()
property_3: מחרוזת;
}

קובץ הישות שלמעלה יוצר את הטבלה הזו במסד הנתונים שלך:

מִבְחָן
תְעוּדַת זֶהוּת int (11) מפתח ראשי AUTO_INCREMENT
נכס_1 varchar (255)
נכס_2 varchar (255)
נכס_3 varchar (255)

ה תיעוד TypeORM מכסה ישויות בפירוט נוסף.

שלב 3: חיבור האפליקציה שלך למסד נתונים

כעת, לאחר שהישות שלך מוגדרת, תצטרך לחבר את היישום שלך למסד נתונים. דוגמה זו משתמשת ב-SQLite.

בצע את השלבים הבאים כדי לחבר את היישום שלך למסד נתונים:

  1. במודול השורש של היישומים שלך (בדרך כלל ה app.module.ts קובץ), ייבוא TypeOrmModule מ @nestjs/typeorm.
  2. באותו קובץ, ייבא את כל הישויות שלך.
  3. בתוך ה יבוא מערך, התקשר ל עבור שורש שיטה ב- TypeOrmModule. שיטת forRoot משתפת את חיבור מסד הנתונים דרך כל המודולים ביישום שלך.
  4. העבר אובייקט ריק כארגומנט לשיטת forRoot; זה יהיה אובייקט התצורה של TypeORM.
  5. הוסף נכס, סוּג, לאובייקט התצורה והגדר אותו ל "סקלייט". המאפיין type מציין את שם מסד הנתונים שבו אתה משתמש.
  6. הוסף עוד נכס, מאגר מידע, לאובייקט התצורה והגדר אותו ל "test.db". מאפיין מסד הנתונים מציין את השם המועדף עליך עבור מסד הנתונים שלך.
  7. הוסף עוד נכס, ישויות, לאובייקט התצורה והגדר אותו למערך ריק. מלא את המערך הריק בישויות שייבאת קודם לכן.
  8. הוסף עוד נכס, לְסַנכְרֵן, והגדר אותו נָכוֹן; מאפיין זה מסנכרן את הישויות שלך למסד הנתונים שלך ומעדכן אותו בכל פעם שאתה מפעיל את הקוד. עליך להגדיר רק את המאפיין הזה ל נָכוֹן בפיתוח. במהלך הייצור, עליך להגדיר אותו ל שֶׁקֶר כדי למנוע אובדן נתונים.
// src/app.module.ts
יְבוּא { מודול } מ '@nestjs/common';
יְבוּא { TypeOrmModule } מ '@nestjs/typeorm';
יְבוּא { מבחן } מ './test/test.entity';
יְבוּא { ישות2 } מ './entity/entity.entity';
יְבוּא { TestModule } מ './test/test.module';

@מודול({
יבוא: [
TypeOrmModule.forRoot({
סוּג: 'sqlite',
מאגר מידע: 'test.db',
ישויות: [מבחן, ישות2],
לְסַנכְרֵן: נָכוֹן, //פיתוח בלבד
}),
TestModule,
],
בקרים: [],
ספקים: [],
})
יְצוּאמעמדAppModule{}

שלב 4: יצירת מאגר

מאגר הוא שכבת הגישה של ישות המשמשת לביצוע שאילתות (הוספה, מחיקה, שמירה, חיפוש וכו') בטבלה שנוצרה על ידי הישות במסד הנתונים. TypeORM תומך בדפוס עיצוב המאגר, ולכן, לכל ישות יש מאגר משלה.

TypeORM יוצר אוטומטית מאגר עבור הישות שלך כאשר אתה מבצע את השלבים הבאים:

  1. בקובץ המודול של הישות שלך, ייבא TypeOrmModule מ @nestjs/typeorm וייבא את הישות שלך.
  2. ליצור יבוא מערך ב- @מודול מְעַצֵב.
  3. במערך הייבוא, התקשר ל- עבור תכונה שיטה ב- TypeOrmModule.
  4. העבירו מערך כארגומנט לתוכם ואכלס את המערך בישות שלכם.
// src/test/test.module.ts
יְבוּא { מודול } מ '@nestjs/common';
יְבוּא { TypeOrmModule } מ '@nestjs/typeorm';
יְבוּא { TestController } מ './test.controller';
יְבוּא { TestService } מ './test.service';
יְבוּא { מבחן } מ './test.entity';

@מודול({
יבוא: [TypeOrmModule.forFeature([בדיקה])],
ספקים: [TestService],
בקרים: [TestController],
})

שלב 5: הזרקת המאגר שלך לשירות שלו באמצעות הזרקת תלות

הזרקת תלות היא טכניקת הנדסת תוכנה שהיא צורה של עקרון היפוך בקרה. זה מעביר את הנטל של ניהול התלות מקוד הלקוח לספרייה או לשירות שהוא תלוי בו.

בצע את השלבים הבאים כדי להחדיר את המאגר שלך לשירות:

  1. בקובץ השירות שלך, ייבא מאגר מ typorm וה InjectRepository מעצב מ @nestjs/typeorm. ייבא גם את הישות שברצונך להזריק למאגר שלה.
  2. בכיתת השירות שלך, צור א בַּנַאִי.
  3. להצהיר על א פְּרָטִי מִשְׁתַנֶה, ריפו, כפרמטר בבנאי כדי לאתחל אותו.
  4. הקצה סוג של מאגר למחזר עם סוג גנרי של הישות שלך.
  5. הערה ריפו עם מעצב InjectRepository והעבר את הישות שלך כטיעון.
// test.service.ts
יְבוּא { הזרקה } מ '@nestjs/common';
יְבוּא { מאגר } מ 'טיפוס';
יְבוּא { InjectRepository } מ '@nestjs/typeorm';
יְבוּא { מבחן } מ './test.entity';

@ניתן להזרקה()
יְצוּאמעמדTestService{
בַּנַאִי(
@InjectRepository(מִבְחָן)
מאגר פרטי: מאגר<מִבְחָן>,
) {}
}

עכשיו כשההגדרה שלך הושלמה, אתה יכול לבצע שאילתות SQL עליו כדי לאחזר או לשנות נתונים.

ביצוע שאילתות SQL עם TypeORM

אתה יכול לבצע כל שאילתת SQL פשוטה על ידי קריאה לשיטות המאגר של TypeORM ב- ריפו משתנה בתוך מחלקת השירות שלך. אתה יכול גם ליצור שאילתות SQL מורכבות באמצעות בונה השאילתות של TypeORM.