TypeORM 列装饰器完整总结

在 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; };
}
相关推荐
一直_在路上6 小时前
Go语言并发编程架构师指南:从基础到企业级实战
后端·架构
彭于晏爱编程6 小时前
你真的了解 Map、Set 嘛
前端
Reboot6 小时前
Mongodb数据类型
后端
似水流年流不尽思念6 小时前
Nacos Config 动态刷新的长轮询机制是如何实现的?
后端
崔璨6 小时前
详解Vue3的响应式系统
前端·vue.js
摸鱼的鱼lv6 小时前
🔥 Vue.js组件通信全攻略:从父子传值到全局状态管理,一篇搞定所有场景!🚀
前端·vue.js
一朵筋斗云6 小时前
关于poll和epoll
后端
黑白世界46486 小时前
开源分享: php-tools php gui的一次尝试
后端·php
金牌服务刘6 小时前
主数据平台下游系统过多如何下发数据?
后端·微服务·连续集成