nestjs 操作数据库

1、注册(建议在全局模块中或者app.module.ts)

@Global()
@Module({
    imports: [
        ConfigModule.forRoot({
            cache: true,
            load: [configurationService],
            isGlobal: true,
        }),
        TypeOrmModule.forRootAsync({
            inject: [ConfigService],
            useFactory: (config: ConfigService) => {
                return ({
                    type: "mysql",
                    autoLoadEntities: true,     //自动加载实体
                    timezone: '+08:00',
                    ...config.get("db.mysql"),
                } as TypeOrmModuleOptions)
            }
        }),
    ],
    exports: [
        TypeOrmModule
    ],
})
//配置文件db片段
db:
  mysql:
    host: '127.0.0.1'
    username: 'root'
    password: '123456789'
    database: 'go'
    port: 3306
    charset: 'utf8mb4'
    logger: 'file'
    logging: true
    multipleStatements: true
    dropSchema: false
    synchronize: true
    supportBigNumbers: true
    bigNumberStrings: true

2、以users模块为例,目录结构如下:

定义entity,这个是为了通过entity来拿到要操作的表以及字段:

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

@Entity("sys_user", { schema: "go" })
export class UsersEntity {
  @Column("varchar", { name: "username", nullable: true, length: 255 })
  username: string | null;

  @Column("varchar", { name: "password", nullable: true, length: 255, select: false })
  password: string | null;

  @PrimaryGeneratedColumn({ type: "int", name: "id" })
  id: number;

  @Column("varchar", { primary: true, name: "userid", length: 255 })
  userid: string;

  @Column("varchar", { name: "mobile", nullable: true, length: 200 })
  mobile: string | null;

}

3、使用 forFeature() 方法来定义在当前 scope 中注册的存储库,

在需要进行数据库查询的模块中使用forFeature进行注册,如user的service中要操作数据库,那么就需要在user的module中使用TypeOrmModule.forFeature,然后将user的entity传给它,具体代码如下:users的module中书写

import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersEntity } from './entities/users.entity';

@Module({
  imports: [
    TypeOrmModule.forFeature([UsersEntity])
  ],
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule { }

4、在service中使用:

通过@InjectRepository(UsersEntity) private usersEntity: Repository<UsersEntity>,可以直接对UsersEntity对应的表进行增删改查

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { UsersEntity } from './entities/users.entity'
import { Repository } from 'typeorm'
import { InjectRepository } from '@nestjs/typeorm';
@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(UsersEntity)
    private usersEntity: Repository<UsersEntity>
  ) { }
  async create(createUserDto: CreateUserDto) {
    const userInfo = await this.usersEntity.findOneBy({
      username: createUserDto.username!
    })
    console.log(userInfo)
    return userInfo
  }

  findAll() {
    return `This action returns all users`;
  }

  findOne(id: number) {
    return `This action returns a #${id} user`;
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    return `This action updates a #${id} user`;
  }

  remove(id: number) {
    return `This action removes a #${id} user`;
  }
}

通过数据库中的表来自动生成实体类

npx typeorm-model-generator -h localhost -d go -p 3306 -u root -x 123456789 -e mysql -o ./src/module/system/users/entities --noConfig --tables sys_user

-h : 数据库主机地址(例如 localhost
-d : 数据库名称(例如 go

-p:  数据库端口号

-u:  数据库用户名(例如 root

-x:数据库密码(例如 123456789)
-e:数据库类型(例如 mysql)

-o:生成的实体类文件输出目录(例如 ./src/module/system/users/entities

--tables: 要生成实体类的表名(例如 sys_user

--noConfig: 不生成配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值