【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)!