Skip to content

TypeORM 实体列属性

参考:https://typeorm.nodejs.cn/entities

列约束

ts
// 主键约束(自动):int 自增长
import { PrimaryGeneratedColumn } from "typeorm"
@PrimaryGeneratedColumn()
id: number;

// 主键约束(自动):自动生成 uuid string 随机字符串(Uuid 是一个唯一的字符串 ID)
import { PrimaryGeneratedColumn } from "typeorm"
@PrimaryGeneratedColumn("uuid")
id: string

// 主键约束(手动,常用于复合主键):手动分配 id,多列决定
import { PrimaryColumn } from "typeorm"
@PrimaryColumn()
firstName: string
@PrimaryColumn()
lastName: string

// 是否允许为 null (非空约束)
import { Column } from "typeorm"
@Column({ nullable: true })
columnIsNull: string;

// 是否唯一(唯一约束)
@Column({ unique: true })
columnIsUnique: string;

// 默认值
@Column({ default: '1' })
columnDefault: string;
// 默认值为当前时间戳
@Column({ default: () => "CURRENT_TIMESTAMP" })
columnDefaultTime: Date;

// 注释
@Column({ comment: '注释哟' })
columnComment: string;

// 定义查询时是否默认隐藏该列(适用于密码)
@Column({ select: false })
columnSelect: string;

// 列名 name
@Column({ name: 'user_name' })
columnName: string;

列类型

  1. 基础类型
ts
import { Column } from "typeorm"
// int、bigint、bit、decimal、money、numeric、smallint、smallmoney、tinyint、float、real、date、datetime2、datetime、
// datetimeoffset、smalldatetime、time、char、varchar、text、nchar、nvarchar、ntext、binary、image、 varbinary、hierarchyid、
// sql_variant、timestamp、uniqueidentifier、xml、geometry、geography、rowversion

// 字符串类型 varchar(255)
@Column({ type: 'varchar', length: '255' })
columnLength: string;

// 整数类型 INT(11),宽度 11 只在 MySQL 中有效 ,取值范围:smallint(1-6)、mediumint(1-9)、int(1-11)、bigint(1-20)
@Column({ type: 'int', width:11 })
columnLength: number;

// 小数类型 DECIMAL(10,2)
@Column({type: 'decimal', precision: 10, scale: 2, default: 0.00 })
columnPrecisionScale: number;

// 数字类型(有无符号仅在 MySQL 中使用,无符号:可存储零、正数,有符号:可存储负数、零、正数)
@Column({type: 'decimal', precision: 10, scale: 2, default: 0.00, unsigned: true})
columnIsUnsigned: number;
  1. 复杂类型
ts
enum UserRole {
  ADMIN = 'admin',
  EDITOR = 'editor',
  GUEST = 'guest'
}
type UserRoleType = "admin" | "user" | "guest"

// 枚举类型 (枚举值数组)
@Column({ type: 'enum',enum: ['admin', 'user', 'guest'],default: 'guest' })
columnEnum: string;

// 枚举类型 (TS 类型,支持字符串、数字和异构枚举)
@Column({ type: 'enum',enum: UserRole,default: UserRole.GUEST })
columnEnumSecond: string;

// set 类型 (枚举值数组)
@Column({ type: 'set',enum: ['admin', 'user', 'guest'],default: ["admin", "guest"] })
columnSet: UserRoleType[];

// set 类型 (TS 类型)
@Column({ type: 'set',enum: UserRole,default: [UserRole.ADMIN, UserRole.EDITOR] })
columnSetSecond: UserRole[];

// simple-array 类型(它可以将原始数组值存储在单个字符串列中。所有值均以逗号分隔)(存储时赋值数组,查询时返回数组)
@Column({type: "simple-array"})
names: string[];
// 示例:存储时
const user = new User()
user.names = ["Alexander", "Alex", "Sasha", "Shurik"]

// simple-json 类型(它可以存储任何可以通过 JSON.stringify 存储在数据库中的值)(存储时赋值对象,查询时返回对象)
@Column({type: "simple-json"})
profile: { name: string; nickname: string }
// 示例:存储时
const user = new User()
user.profile = { name: "John", nickname: "Malkovich" }
  1. 其他配置项
ts
// 值转换器
@Column({ transformer: {
  // to: (value) => encrypt(value),
  // from: (value) => decrypt(value)
  to: (value) => (value),
  from: (value) => (value)
}})
columnSecret: string;

// 自动生成 uuid 值的列(非主键列)
@Column()
@Generated("uuid")
uuid: string

onUpdate: string - ON UPDATE 触发器仅在 MySQL 中使用
update: boolean - 指示列值是否由 "save" 操作更新如果为 false则仅当你第一次插入对象时才能写入此值默认值为 true
insert: boolean - 指示是否在第一次插入对象时设置列值默认值为 true
select: boolean - 定义查询时是否默认隐藏该列当设置为 false标准查询不会显示列数据默认列是 select: true

日期列(自动生成)

插入、修改、软删除、版本号

ts
// 插入时间(自动设置为实体的插入日期)
@CreateDateColumn()
createdAt: Date;

// 插入时间(每次调用实体管理器或存储库的 save 时,它都会自动设置为实体的更新时间)
@UpdateDateColumn()
updatedAt: Date;

// 软删除时间(每次调用实体管理器或存储库的软删除时,它都会自动设置为实体的删除时间)
@DeleteDateColumn()
deletedAt?: Date;

// 版本号,每次调用实体管理器或存储库的 save 时,它都会自动设置为实体的版本(增量号)
@VersionColumn()
version?: number;

// 自动设置为实体插入时的日期的另一种写法('date', 'time', 'timestamp', 'timestamp with time zone')
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP',nullable: false })
createdAtSecond: Date;