在 TypeORM 中,除了 @PrimaryGeneratedColumn
自增主键外,还有以下几种列装饰器:
主键相关装饰器
1. @PrimaryColumn()
typescript
@PrimaryColumn()
id: number;
// 或指定类型
@PrimaryColumn('uuid')
id: string;
2. @PrimaryGeneratedColumn()
typescript
// 自增主键(默认)
@PrimaryGeneratedColumn()
id: number;
// UUID主键
@PrimaryGeneratedColumn('uuid')
id: string;
// 自定义策略
@PrimaryGeneratedColumn('increment')
id: number;
普通列装饰器
3. @Column()
- 基础列
typescript
// 基本用法
@Column()
name: string;
// 带选项
@Column({
type: 'varchar',
length: 100,
nullable: false,
unique: true,
default: 'default value'
})
title: string;
// 数字类型
@Column({ type: 'int', unsigned: true })
age: number;
// 文本类型
@Column('text')
description: string;
// 布尔类型
@Column({ type: 'boolean', default: false })
isActive: boolean;
// 日期时间
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
createdAt: Date;
// JSON类型
@Column('json')
metadata: any;
// 枚举类型
@Column({ type: 'enum', enum: ['admin', 'user', 'guest'] })
role: string;
特殊列装饰器
4. @CreateDateColumn()
typescript
@CreateDateColumn()
createdAt: Date; // 自动设置创建时间
5. @UpdateDateColumn()
typescript
@UpdateDateColumn()
updatedAt: Date; // 自动更新修改时间
6. @DeleteDateColumn()
typescript
@DeleteDateColumn()
deletedAt: Date; // 软删除时间戳
7. @VersionColumn()
typescript
@VersionColumn()
version: number; // 乐观锁版本号
8. @Generated()
typescript
@Generated('uuid')
uuid: string;
@Generated('increment')
sequence: number;
完整示例
让我创建一个更完整的实体示例来展示这些装饰器:
TypeORM 列装饰器完整总结:
🔑 主键装饰器
@PrimaryColumn()
- 手动指定主键@PrimaryGeneratedColumn()
- 自动生成主键(自增/UUID)
📝 普通列装饰器
@Column()
- 基础列装饰器,支持各种数据类型
⏰ 时间相关装饰器
@CreateDateColumn()
- 自动设置创建时间@UpdateDateColumn()
- 自动更新修改时间@DeleteDateColumn()
- 软删除时间戳
🔢 特殊功能装饰器
@VersionColumn()
- 乐观锁版本号@Generated()
- 自动生成值(UUID/递增序列)
📊 常用数据类型示例
typescript
// 字符串类型
@Column('varchar', { length: 100 })
@Column('text')
@Column('char', { length: 10 })
// 数字类型
@Column('int')
@Column('bigint')
@Column('decimal', { precision: 10, scale: 2 })
@Column('float')
@Column('double')
// 日期时间类型
@Column('date')
@Column('time')
@Column('datetime')
@Column('timestamp')
// 其他类型
@Column('boolean')
@Column('json')
@Column('enum', { enum: MyEnum })
@Column('simple-array') // 数组类型
🔧 常用选项参数
typescript
@Column({
type: 'varchar', // 数据类型
length: 255, // 长度
nullable: true, // 可空
unique: true, // 唯一约束
default: 'default value', // 默认值
comment: '字段说明', // 注释
unsigned: true, // 无符号(数字类型)
precision: 10, // 精度
scale: 2, // 小数位数
})
user-complete.entity.ts
文件展示了所有这些装饰器的实际用法,你可以参考这个文件来了解每种类型的具体应用场景。
js
// user-complete.entity.ts
import {
Entity,
Column,
PrimaryGeneratedColumn,
PrimaryColumn,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
VersionColumn,
Generated
} from 'typeorm';
// 用户角色枚举
export enum UserRole {
ADMIN = 'admin',
USER = 'user',
GUEST = 'guest'
}
// 用户状态枚举
export enum UserStatus {
ACTIVE = 'active',
INACTIVE = 'inactive',
SUSPENDED = 'suspended'
}
@Entity('users_complete')
export class UserComplete {
// 1. 自增主键
@PrimaryGeneratedColumn()
id: number;
// 2. UUID主键(如果不想用自增主键)
// @PrimaryGeneratedColumn('uuid')
// uuid: string;
// 3. 手动指定主键
// @PrimaryColumn()
// customId: string;
// 4. 基础字符串列
@Column({
type: 'varchar',
length: 100,
nullable: false,
comment: '用户姓名'
})
name: string;
// 5. 唯一邮箱
@Column({
type: 'varchar',
length: 255,
unique: true,
comment: '用户邮箱'
})
email: string;
// 6. 可空的手机号
@Column({
type: 'varchar',
length: 20,
nullable: true,
comment: '手机号码'
})
phone: string;
// 7. 整数年龄
@Column({
type: 'int',
unsigned: true,
comment: '用户年龄'
})
age: number;
// 8. 小数类型(如余额)
@Column({
type: 'decimal',
precision: 10,
scale: 2,
default: 0.00,
comment: '账户余额'
})
balance: number;
// 9. 布尔类型
@Column({
type: 'boolean',
default: true,
comment: '是否激活'
})
isActive: boolean;
// 10. 枚举类型 - 用户角色
@Column({
type: 'enum',
enum: UserRole,
default: UserRole.USER,
comment: '用户角色'
})
role: UserRole;
// 11. 枚举类型 - 用户状态
@Column({
type: 'enum',
enum: UserStatus,
default: UserStatus.ACTIVE,
comment: '用户状态'
})
status: UserStatus;
// 12. 文本类型
@Column({
type: 'text',
nullable: true,
comment: '用户简介'
})
bio: string;
// 13. JSON类型
@Column({
type: 'json',
nullable: true,
comment: '用户设置'
})
settings: any;
// 14. 日期类型
@Column({
type: 'date',
nullable: true,
comment: '出生日期'
})
birthDate: Date;
// 15. 时间类型
@Column({
type: 'time',
nullable: true,
comment: '偏好时间'
})
preferredTime: string;
// 16. 自动生成的UUID字段
@Generated('uuid')
@Column()
uuid: string;
// 17. 自动递增序列号
@Generated('increment')
@Column()
sequence: number;
// 18. 自动创建时间
@CreateDateColumn({
comment: '创建时间'
})
createdAt: Date;
// 19. 自动更新时间
@UpdateDateColumn({
comment: '更新时间'
})
updatedAt: Date;
// 20. 软删除时间(用于软删除)
@DeleteDateColumn({
comment: '删除时间'
})
deletedAt: Date;
// 21. 乐观锁版本号
@VersionColumn({
comment: '版本号'
})
version: number;
// 22. 带默认值的列
@Column({
type: 'varchar',
length: 50,
default: 'zh-CN',
comment: '用户语言偏好'
})
language: string;
// 23. 数组类型(PostgreSQL支持)
// @Column('simple-array')
// tags: string[];
// 24. 复杂数组类型(PostgreSQL支持)
// @Column('simple-json')
// profile: { nickname: string; avatar: string; };
}