• Nest


    Nest 与数据库无关,允许您轻松地与任何 SQL 或 NoSQL 数据库集成
    Nest 连接到数据库只需为数据库加载一个适当的 Node.js 驱动程序

    TypeORM 是一个 ORM 框架,是一款比较成熟的对象关系映射器,它是由 typescript 写的。支持 MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL 等数据库。
    https://docs.nestjs.com/techniques/database

    安装

    Nest提供TypeORMSequelize紧密集成
    对于TypeORM支持的任何数据库,只需要为所选数据库安装关联的客户端API库。
    如:MySQL

    npm install --save @nestjs/typeorm typeorm mysql2
    

    TypeOrmModule 导入AppModule

    app.module.ts

    // forRoot() 方法支持所有TypeORM包中createConnection()函数暴露出的配置属性
    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql',
          host: 'localhost',
          port: 3306,
          username: 'root',
          password: 'root',
          database: 'test',
          entities: [],
          synchronize: true,
        }),
      ],
    })
    export class AppModule {}
    
    
    参数 说明
    retryAttempts 重试连接数据库的次数(默认:10)
    retryDelay 两次重试连接的间隔(ms)(默认:3000)
    autoLoadEntities 如果为true,将自动加载实体(默认:false)
    keepConnectionAlive 如果未true,在应用程序关闭后连接不会关闭(默认:false)

    也可以创建 ormconfig.json,以不带任何选项地调用 forRoot()

    因此每个实体都有自己的存储库(表)

    1、定义一个User实体

    import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
    
    @Entity()
    export class User {
      @PrimaryGeneratedColumn()
      id: number;
    
      @Column()
      firstName: string;
    
      @Column()
      lastName: string;
    
      @Column({ default: true })
      isActive: boolean;
    }
    

    2、插入entities数组中来让 TypeORM知道它的存在

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from './users/user.entity';
    
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql',
          host: 'localhost',
          port: 3306,
          username: 'root',
          password: 'root',
          database: 'test',
          entities: [User],
          synchronize: true,
        }),
      ],
    })
    export class AppModule {}
    

    3、使用 forFeature() 方法定义在当前范围中注册哪些存储库

    user.module.ts

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { UsersService } from './users.service';
    import { UsersController } from './users.controller';
    import { User } from './user.entity';
    
    @Module({
      imports: [TypeOrmModule.forFeature([User])],
      providers: [UsersService],
      controllers: [UsersController],
    })
    export class UsersModule {}
    

    4、@InjectRepository()装饰器将 UsersRepository 注入到 UsersService 中

    users.service.ts

    import { Injectable } from '@nestjs/common';
    import { InjectRepository } from '@nestjs/typeorm';
    import { Repository } from 'typeorm';
    import { User } from './user.entity';
    
    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private usersRepository: Repository<User>
      ) {}
    
      findAll(): Promise<User[]> {
        return this.usersRepository.find();
      }
    
      findOne(id: string): Promise<User> {
        return this.usersRepository.findOne(id);
      }
    
      async remove(id: string): Promise<void> {
        await this.usersRepository.delete(id);
      }
    }
    

    5、UsersModule 导入根 AppModule

  • 相关阅读:
    【OpenCV学习笔记1】OpenCV 编程简介[轉]
    latex与word比较
    【C/C++语法外功】传值&传引用&传指针
    ellen 纽奥良大学演讲
    华侨大学50年校庆校长讲话
    【专题】工业相机接口
    【C/C++参考手册】C++资源之不完全导引[轉]
    比尔盖茨_哈佛演说
    拉里.埃里森_耶鲁大学演讲
    【OpenCV学习笔记2】OpenCV 完全安装 新增VS2010+OpenCV2.1,新增VS2010+OpenCV2.3.1
  • 原文地址:https://www.cnblogs.com/zzghk/p/15225795.html
Copyright © 2020-2023  润新知