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: 不生成配置文件