/ / Cách sử dụng cơ sở dữ liệu SQL trong ứng dụng NestJS với TypeORM

Cách sử dụng cơ sở dữ liệu SQL trong ứng dụng NestJS với TypeORM

Nest in a Tree Featured

Object-Relational Mapper (ORM) là một thư viện triển khai kỹ thuật Object-Relational mapper. Điều này cho phép bạn viết các truy vấn cơ sở dữ liệu SQL bằng cách sử dụng mô hình hướng đối tượng của ngôn ngữ ưa thích của bạn.

TypeORM là một ORM TypeScript giúp cho việc giao tiếp với các cơ sở dữ liệu khác nhau trở nên rất dễ dàng. Nó hoạt động với cơ sở dữ liệu SQL nhưng cũng giao diện độc đáo với cơ sở dữ liệu NoSQL như MongoDB.

NestJS cung cấp hỗ trợ cấp cao cho TypeORM ngoài hộp. Gói TypeORM chuyên dụng làm cho việc tích hợp tương đối dễ dàng.

Bước 1: Cài đặt phụ thuộc

Trước khi sử dụng TypeORM trong ứng dụng NestJS, bạn phải cài đặt nó với gói NestJS gốc và cơ sở dữ liệu SQL ưa thích của bạn. SQLite là một tùy chọn đơn giản, không cần cài đặt.

Chạy lệnh sau để cài đặt TypeORM và gói NestJS gốc của nó, sử dụng trình quản lý gói npm:

npm install @nestjs/typeorm typeorm

Chạy lệnh sau để cài đặt SQLite:

npm install sqlite3

Bước 2: Tạo một thực thể

Thực thể là một tập hợp các trường xác định dữ liệu được lưu trữ trong cơ sở dữ liệu. TypeORM sử dụng tệp thực thể để tạo bảng trong cơ sở dữ liệu của bạn.


Làm theo các bước bên dưới để tạo một thực thể:

  1. Tạo tệp trong mô-đun ứng dụng của bạn và đặt tên theo quy ước đặt tên NestJS ( .entity.ts).
  2. Trong tệp thực thể của bạn, hãy nhập Thực thể, CộtPrimaryGeneratedColumn trang trí từ người đánh máy.
  3. Trong tệp thực thể của bạn, hãy tạo và xuất một lớp.
  4. Điền vào lớp với các giá trị bạn muốn trong cơ sở dữ liệu của mình, như Tôi, Tênvân vân.
  5. Chú thích lớp thực thể của bạn bằng trình trang trí Thực thể. Điều này làm cho lớp của bạn có thể nhận dạng được TypeORM như một thực thể.
  6. Chú thích thuộc tính id của bạn bằng trình trang trí PrimaryGeneratedColumn. Điều này cho TypeORM đánh dấu Tôi làm khóa chính và tự động gia tăng nó.
  7. Chú thích các thuộc tính còn lại bằng Trình trang trí cột. Điều này thêm chúng dưới dạng cột trong cơ sở dữ liệu của bạn.

Ví dụ:


import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Test {
@PrimaryGeneratedColumn()
id: number;

@Column()
property_1: string;

@Column()
property_2: string;

@Column()
property_3: string;
}

Tệp thực thể ở trên tạo bảng này trong cơ sở dữ liệu của bạn:

kiểm tra
Tôi int (11) KHÓA CHÍNH TỰ ĐỘNG AUTO_INCREMENT
tài sản_1 varchar (255)
thuộc tính_2 varchar (255)
property_3 varchar (255)

Tài liệu TypeORM trình bày chi tiết hơn về các thực thể.

Bước 3: Kết nối ứng dụng của bạn với cơ sở dữ liệu

Bây giờ thực thể của bạn đã được thiết lập, bạn sẽ cần kết nối ứng dụng của mình với cơ sở dữ liệu. Ví dụ này sử dụng SQLite.

Làm theo các bước bên dưới để kết nối ứng dụng của bạn với cơ sở dữ liệu:

  1. Trong mô-đun gốc ứng dụng của bạn (Thường là app.module.ts tệp), nhập TypeOrmModule từ @ nestjs / typeorm.
  2. Trong cùng một tệp, hãy nhập tất cả các thực thể của bạn.
  3. bên trong hàng nhập khẩu mảng, gọi forRoot trên TypeOrmModule. Phương thức forRoot chia sẻ kết nối cơ sở dữ liệu thông qua tất cả các mô-đun trong ứng dụng của bạn.
  4. Truyền một đối tượng trống làm đối số vào phương thức forRoot; đây sẽ là đối tượng cấu hình TypeORM.
  5. Thêm một thuộc tính, loại hìnhvào đối tượng cấu hình và đặt nó thành “Sqlite”. Thuộc tính type biểu thị tên của cơ sở dữ liệu bạn đang sử dụng.
  6. Thêm một thuộc tính khác, cơ sở dữ liệuvào đối tượng cấu hình và đặt nó thành “Test.db”. Thuộc tính cơ sở dữ liệu biểu thị tên ưa thích của bạn cho cơ sở dữ liệu của bạn.
  7. Thêm một thuộc tính khác, thực thể, vào đối tượng cấu hình và đặt nó thành một mảng trống. Điền vào mảng trống với các thực thể bạn đã nhập trước đó.
  8. Thêm một thuộc tính khác, làm cho đồng bộvà đặt nó thật; thuộc tính này đồng bộ các thực thể của bạn với cơ sở dữ liệu của bạn và cập nhật nó mỗi khi bạn chạy mã. Bạn chỉ nên đặt thuộc tính này thành thật trong giai đoạn phát triển. Trong quá trình sản xuất, bạn nên đặt nó thành sai để tránh mất dữ liệu.



import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Test } from './test/test.entity';
import { Entity2 } from './entity/entity.entity';
import { TestModule } from './test/test.module';

@Module({
imports: [
TypeOrmModule.forRoot({
type: 'sqlite',
database: 'test.db',
entities: [Test, Entity2],
synchronize: true,
}),
TestModule,
],
controllers: [],
providers: [],
})
export class AppModule {}

Bước 4: Tạo kho lưu trữ

Kho lưu trữ là một lớp truy cập của thực thể được sử dụng để thực hiện các truy vấn (chèn, xóa, lưu, tìm, v.v.) trên bảng được tạo bởi thực thể trong cơ sở dữ liệu. TypeORM hỗ trợ mẫu thiết kế kho lưu trữ, do đó, mỗi thực thể có kho lưu trữ riêng.

TypeORM tự động tạo kho lưu trữ cho thực thể của bạn khi bạn làm theo các bước bên dưới:

  1. Trong tệp mô-đun của tổ chức của bạn, hãy nhập TypeOrmModule từ @ nestjs / typeorm và nhập thực thể của bạn.
  2. Tạo ra một hàng nhập khẩu mảng trong @Module người trang trí.
  3. Trong mảng nhập, hãy gọi forFeature trên TypeOrmModule.
  4. Chuyển một mảng làm đối số vào của bạn và điền vào mảng với thực thể của bạn.


import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TestController } from './test.controller';
import { TestService } from './test.service';
import { Test } from './test.entity';

@Module({
imports: [TypeOrmModule.forFeature([Test])],
providers: [TestService],
controllers: [TestController],
})

Bước 5: Đưa kho lưu trữ của bạn vào dịch vụ của nó bằng cách sử dụng Dependency Injection

Chèn phụ thuộc là một kỹ thuật công nghệ phần mềm là một dạng của sự đảo ngược của nguyên tắc điều khiển. Nó chuyển gánh nặng quản lý phụ thuộc từ mã máy khách sang thư viện hoặc dịch vụ mà nó phụ thuộc.

Làm theo các bước bên dưới để đưa hệ thống lưu trữ của bạn vào một dịch vụ:

  1. Trong tệp dịch vụ của bạn, hãy nhập Kho từ người đánh máyInjectRepository trang trí từ @ nestjs / typeorm. Đồng thời nhập thực thể bạn muốn đưa vào kho lưu trữ của nó.
  2. Trong lớp dịch vụ của bạn, hãy tạo người xây dựng.
  3. Khai báo một riêng Biến đổi, reponhư một tham số trong phương thức khởi tạo để khởi tạo nó.
  4. Chỉ định một loại Kho lưu trữ với một loại thực thể chung của bạn.
  5. Chú thích kho bằng trình trang trí InjectRepository và chuyển thực thể của bạn làm đối số.


import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { Test } from './test.entity';

@Injectable()
export class TestService {
constructor(
@InjectRepository(Test)
private repo: Repository<Test>,
) {}
}

Bây giờ thiết lập của bạn đã hoàn tất, bạn có thể thực hiện các truy vấn SQL trên đó để truy xuất hoặc sửa đổi dữ liệu.

Tạo truy vấn SQL với TypeORM

Bạn có thể thực hiện bất kỳ truy vấn SQL đơn giản nào bằng cách gọi các phương thức kho lưu trữ của TypeORM trên repo biến bên trong lớp dịch vụ của bạn. Bạn cũng có thể tạo các truy vấn SQL phức tạp bằng cách sử dụng trình tạo truy vấn của TypeORM.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *