Ένας αντικειμενικός-σχεσιακός χαρτογράφος (ORM) είναι μια βιβλιοθήκη που υλοποιεί την τεχνική αντικειμενικής-σχεσιακής χαρτογράφησης. Αυτό σας επιτρέπει να γράφετε ερωτήματα βάσης δεδομένων SQL χρησιμοποιώντας το αντικειμενοστραφή παράδειγμα της γλώσσας που προτιμάτε.

Το TypeORM είναι ένα TypeScript ORM που κάνει πολύ εύκολη τη διασύνδεση με διάφορες βάσεις δεδομένων. Λειτουργεί με βάσεις δεδομένων SQL αλλά και διασυνδέεται όμορφα με βάσεις δεδομένων NoSQL όπως το MongoDB.

Το NestJS παρέχει υποστήριξη υψηλού επιπέδου για το TypeORM out-of-the-box. Το αποκλειστικό πακέτο TypeORM κάνει την ενσωμάτωση σχετικά εύκολη.

Βήμα 1: Εγκατάσταση εξαρτήσεων

Πριν χρησιμοποιήσετε το TypeORM σε μια εφαρμογή NestJS, πρέπει να το εγκαταστήσετε με το εγγενές πακέτο NestJS και την προτιμώμενη βάση δεδομένων SQL. Το SQLite είναι μια απλή επιλογή χωρίς εγκατάσταση.

Εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε το TypeORM και το εγγενές πακέτο NestJS του, χρησιμοποιώντας ο διαχειριστής πακέτων npm:

npm εγκατάσταση @nestjs/typeorm typeorm
instagram viewer

Εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε το SQLite:

npm εγκαθιστώ sqlite3

Βήμα 2: Δημιουργία οντότητας

Μια οντότητα είναι μια συλλογή πεδίων που ορίζουν τα δεδομένα που είναι αποθηκευμένα σε μια βάση δεδομένων. Το TypeORM χρησιμοποιεί το αρχείο οντοτήτων για να δημιουργήσει έναν πίνακα στη βάση δεδομένων σας.

Ακολουθήστε τα παρακάτω βήματα για να δημιουργήσετε μια οντότητα:

  1. Δημιουργήστε ένα αρχείο στη λειτουργική μονάδα της εφαρμογής σας και ονομάστε το σύμφωνα με τη σύμβαση ονομασίας NestJS (.οντότητα.τσ).
  2. Στο αρχείο οντοτήτων σας, εισαγάγετε το Οντότητα, Στήλη, και PrimaryGeneratedColumn διακοσμητές από typeorm.
  3. Στο αρχείο οντοτήτων σας, δημιουργήστε και εξάγετε μια κλάση.
  4. Συμπληρώστε την κλάση με τις τιμές που θα θέλατε στη βάση δεδομένων σας, όπως ταυτότητα, όνομα, και τα λοιπά.
  5. Σημειώστε την κατηγορία οντοτήτων σας με τον διακοσμητή οντοτήτων. Αυτό κάνει την κλάση σας αναγνωρίσιμη στο TypeORM ως οντότητα.
  6. Σημειώστε την ιδιότητα του αναγνωριστικού σας με το διακοσμητικό PrimaryGeneratedColumn. Αυτό λέει στο TypeORM να επισημάνει το ταυτότητα ως πρωτεύον κλειδί και αυξήστε το αυτόματα.
  7. Σημειώστε τις υπόλοιπες ιδιότητες με τον διακοσμητή στήλης. Αυτό τις προσθέτει ως στήλες στη βάση δεδομένων σας.

Για παράδειγμα:

// src/test/test.entity.ts
εισαγωγή { Entity, Column, PrimaryGeneratedColumn } από 'typeorm';

@Οντότητα()
εξαγωγήτάξηΔοκιμή{
@PrimaryGeneratedColumn()
αριθμό ταυτότητας;

@Στήλη()
ιδιοκτησία_1: συμβολοσειρά;

@Στήλη()
ιδιοκτησία_2: συμβολοσειρά;

@Στήλη()
ιδιοκτησία_3: συμβολοσειρά;
}

Το παραπάνω αρχείο οντοτήτων δημιουργεί αυτόν τον πίνακα στη βάση δεδομένων σας:

δοκιμή
ταυτότητα int (11) ΚΥΡΙΟ ΚΛΕΙΔΙ AUTO_INCREMENT
ιδιοκτησία_1 varchar (255)
ιδιοκτησία_2 varchar (255)
ιδιοκτησία_3 varchar (255)

ο Τεκμηρίωση TypeORM καλύπτει οντότητες με περισσότερες λεπτομέρειες.

Βήμα 3: Σύνδεση της εφαρμογής σας σε μια βάση δεδομένων

Τώρα που η οντότητά σας έχει ρυθμιστεί, θα πρέπει να συνδέσετε την εφαρμογή σας σε μια βάση δεδομένων. Αυτό το παράδειγμα χρησιμοποιεί SQLite.

Ακολουθήστε τα παρακάτω βήματα για να συνδέσετε την εφαρμογή σας σε μια βάση δεδομένων:

  1. Στη μονάδα root των εφαρμογών σας (Συνήθως το app.module.ts αρχείο), εισαγωγή TypeOrmModule από @nestjs/typeorm.
  2. Στο ίδιο αρχείο, εισαγάγετε όλες τις οντότητες σας.
  3. Στο εισαγωγές συστοιχία, καλέστε το forRoot μέθοδο στο TypeOrmModule. Η μέθοδος forRoot μοιράζεται τη σύνδεση της βάσης δεδομένων μέσω όλων των λειτουργικών μονάδων της εφαρμογής σας.
  4. Περάστε ένα κενό αντικείμενο ως όρισμα στη μέθοδο forRoot. αυτό θα είναι το αντικείμενο διαμόρφωσης TypeORM.
  5. Προσθήκη ιδιοκτησίας, τύπος, στο αντικείμενο διαμόρφωσης και ορίστε το σε “sqlite”. Η ιδιότητα 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',
βάση δεδομένων: 'δοκιμή.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. Στο αρχείο υπηρεσίας σας, κάντε εισαγωγή Αποθήκη από typeorm και το InjectRepository διακοσμητής από @nestjs/typeorm. Εισαγάγετε επίσης την οντότητα που θέλετε να εισάγετε το αποθετήριό της.
  2. Στην κατηγορία υπηρεσιών σας, δημιουργήστε ένα κατασκευαστής.
  3. Δηλώστε α ιδιωτικός μεταβλητός, ρεπο, ως παράμετρος στον κατασκευαστή για την αρχικοποίησή του.
  4. Εκχωρήστε έναν τύπο αποθετηρίου σε repo με έναν γενικό τύπο της οντότητάς σας.
  5. Σημειώστε το repo με το διακοσμητικό InjectRepository και περάστε την οντότητά σας ως όρισμα.
// test.service.ts
εισαγωγή { Ενέσιμο } από '@nestjs/common';
εισαγωγή { Αποθετήριο } από 'typeorm';
εισαγωγή { InjectRepository } από '@nestjs/typeorm';
εισαγωγή { Δοκιμή } από './test.entity';

@Ενέσιμα()
εξαγωγήτάξηTestService{
κατασκευαστής(
@InjectRepository(Δοκιμή)
private repo: Αποθετήριο<Δοκιμή>,
) {}
}

Τώρα που η ρύθμισή σας έχει ολοκληρωθεί, μπορείτε να κάνετε Ερωτήματα SQL σε αυτό για ανάκτηση ή τροποποίηση δεδομένων.

Πραγματοποίηση ερωτημάτων SQL με TypeORM

Μπορείτε να κάνετε οποιοδήποτε απλό ερώτημα SQL καλώντας τις μεθόδους αποθετηρίου του TypeORM στο ρεπο μεταβλητή μέσα στην κατηγορία υπηρεσιών σας. Μπορείτε επίσης να δημιουργήσετε σύνθετα ερωτήματα SQL χρησιμοποιώντας το πρόγραμμα δημιουργίας ερωτημάτων του TypeORM.