文章问题导向
typeorm的数据库实体如何编写?
数据库实体的监听装饰器如何使用?
如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案
注意
学习该文章,需要有一定的mysql知识基础
你已经会使用nest连接mysql,如果不会:去学习
实体设计
简单例子:下面讲解
import {
Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn} from "typeorm";
@Entity({
name: 'users' })
export class User {
@PrimaryGeneratedColumn()
id: number; 默认是int(11)类型
@Column()
username: string; 默认是varchar(255)类型
@Column()
password: string;
@Column()
status: boolean;
@CreateDateColumn()
created_at:date;
@UpdateDateColumn()
updated_at:date;
@DeleteDateColumn()
deleted_at:date;
}
装饰器说明
Entity 实体声明,程序运行时,自动创建的数据库表,@Entity({
name: 'users' }), name则是给该表命名,否则自动命名
PrimaryColumn 设置主键,没有自增
PrimaryGeneratedColumn 设置主键和自增,一般是id
Column 设置数据库列字段,在下面说明
CreateDateColumn 创建时间,自动填写
UpdateDateColumn 更新时间,自动填写
DeleteDateColumn 删除时间,自动填写
列字段参数
写法:
@Column("int")
@Column("varchar", {
length: 200 })
@Column({
type: "int", length: 200 }) 一般采用这种
常用选项参数:
@Column({
type: 'varchar', 列的数据类型,参考mysql
name: 'password', 数据库表中的列名,string,如果和装饰的字段是一样的可以不指定
length: 30, 列类型的长度,number
nullable: false, 是否允许为空,boolean,默认值是false
select:false, 查询数据库时是否显示该字段,boolean,默认值是true,密码一般使用false
comment: '密码' 数据库注释,stirng
})
password:string;
@Column({
type:'varchar',
unique: true, 将列标记为唯一列,唯一约束,比如账号不能有相同的
})
username:string;
@Column({
type:'tinyint',
default: () => 1, 默认值,创建时自动填写的值
comment: '0:禁用,1:可用'
})
status:number;
@Column({
type: 'enum',
enum: ['male', 'female'], 枚举类型,只能是数组中的值
default: 'male' 默认值
})
gender:string;
完整例子
import {
Column,
Entity,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from 'ty