自学内容网 自学内容网

【Nestjs实操】TypeORM装饰器汇总

TypeORM 中,@Column 是用于定义数据库字段的装饰器,除此之外还有其他与列相关的装饰器,它们提供了更多的功能和灵活性。

以下是 TypeORM 支持的 列装饰器

1. @PrimaryColumn

定义实体的主键字段,主键值需要手动提供,TypeORM 不会自动生成。

示例:
import { Entity, PrimaryColumn, Column } from "typeorm";

@Entity()
export class User {
  @PrimaryColumn() // 手动指定主键值
  id: number;

  @Column()
  name: string;
}


2. @PrimaryGeneratedColumn

定义实体的主键字段,同时主键值由数据库自动生成,支持 自增UUID

示例:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()
export class User {
  @PrimaryGeneratedColumn() // 默认生成自增整数
  id: number;

  @PrimaryGeneratedColumn('uuid') // 生成 UUID
  uuid: string;

  @Column()
  name: string;
}

3. @Column

定义普通的数据库列,支持设置类型、长度、默认值等。

示例:
import { Entity, Column } from "typeorm";

@Entity()
export class User {
  @Column({ type: 'varchar', length: 100 })
  name: string;

  @Column({ type: 'int', default: 0 })
  age: number;
}

4. @CreateDateColumn

定义一个特殊的日期时间列,用于存储 记录的创建时间,其值由 TypeORM 自动生成。

示例:
import { Entity, CreateDateColumn } from "typeorm";

@Entity()
export class User {
  @CreateDateColumn() // 自动存储创建时间
  createdAt: Date;
}

5. @UpdateDateColumn

定义一个特殊的日期时间列,用于存储 记录的最后更新时间,其值由 TypeORM 自动更新。

示例:
import { Entity, UpdateDateColumn } from "typeorm";

@Entity()
export class User {
  @UpdateDateColumn() // 自动更新更新时间
  updatedAt: Date;
}

6. @DeleteDateColumn

定义一个特殊的日期时间列,用于存储 记录的删除时间,主要用于启用逻辑删除时。

示例:
import { Entity, DeleteDateColumn } from "typeorm";

@Entity()
export class User {
  @DeleteDateColumn() // 记录逻辑删除时间
  deletedAt: Date;
}

7. @VersionColumn

定义一个版本控制列,用于乐观锁定。当记录更新时,该字段的值会自动递增。

示例:
import { Entity, VersionColumn } from "typeorm";

@Entity()
export class User {
  @VersionColumn() // 乐观锁定版本号
  version: number;
}

8. @Generated

用于生成自动字段(通常与 @Column 一起使用),支持自增或 UUID。

示例:
import { Entity, Column, Generated } from "typeorm";

@Entity()
export class User {
  @Column()
  @Generated('uuid') // 自动生成 UUID
  identifier: string;

  @Column()
  @Generated('increment') // 自增值
  sequence: number;
}

9. @Unique

定义列或多个列的唯一约束。

示例:
import { Entity, Column, Unique } from "typeorm";

@Entity()
@Unique(['email']) // 单列唯一
export class User {
  @Column()
  email: string;

  @Column()
  username: string;
}
多列唯一约束:
@Entity()
@Unique(['firstName', 'lastName']) // 多列组合唯一
export class User {
  @Column()
  firstName: string;

  @Column()
  lastName: string;
}

10. @Index

为列创建索引,支持单列索引和多列复合索引。

示例:
import { Entity, Column, Index } from "typeorm";

@Entity()
@Index(['firstName', 'lastName']) // 多列复合索引
export class User {
  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column()
  @Index() // 单列索引
  email: string;
}

11. @Check

为列添加自定义约束(例如范围约束)。

示例:
import { Entity, Column, Check } from "typeorm";

@Entity()
@Check('"age" >= 18') // 年龄限制约束
export class User {
  @Column()
  age: number;
}

12. @RelationId

存储关联实体的 ID(通常用于多对多或一对多的关系)。注:会创建外链。

示例:
import { Entity, ManyToOne, RelationId, Column } from "typeorm";

@Entity()
export class Post {
  @ManyToOne(() => User, (user) => user.posts)
  user: User;

  @RelationId((post: Post) => post.user) // 存储关联的 User ID
  userId: number;
}

总结

装饰器描述
@PrimaryColumn主键,值需手动提供。
@PrimaryGeneratedColumn主键,值由数据库自动生成(支持自增、UUID)。
@Column普通列,支持多种类型和配置。
@CreateDateColumn自动生成创建时间。
@UpdateDateColumn自动生成更新时间。
@DeleteDateColumn自动生成删除时间(逻辑删除)。
@VersionColumn乐观锁定的版本号。
@Generated自增或 UUID 自动生成字段。
@Unique唯一约束。
@Index索引字段(单列或复合索引)。
@Check自定义约束条件。
@RelationId存储关联实体的 ID。

根据实际需求使用相应的装饰器,可以显著增强数据模型的功能和一致性。


原文地址:https://blog.csdn.net/bobo789456123/article/details/144310979

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!