📅  最后修改于: 2023-12-03 15:20:42.807000             🧑  作者: Mango
TypeORM 是一个基于 TypeScript 的 ORM 框架,它提供了丰富的功能,包括支持多个数据库、关系映射、类型检查等。在使用 TypeORM 的过程中,自动递增 ID 是一个非常常见的需求,例如在创建一条新记录时,我们希望数据库自动为我们生成一个唯一的 ID。本文将介绍如何在 TypeORM 中实现自动递增 ID。
在 TypeORM 中,我们可以使用装饰器 @PrimaryGeneratedColumn()
来实现自动递增 ID。这个装饰器表示该字段是主键,并且它的值是自动生成的。我们可以传入一个参数来指定 ID 的类型和自增方式,例如传入 @PrimaryGeneratedColumn("uuid")
表示生成 UUID 类型的 ID。
以下是一个使用 @PrimaryGeneratedColumn()
的例子:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
}
在上面的例子中,我们定义了一个 User
实体,它有三个字段:id
、name
和 age
。id
使用 @PrimaryGeneratedColumn()
装饰器标记为自动生成的主键。
当我们存储一个新用户时,TypeORM 将会自动为 id
字段生成一个唯一的递增值。例如:
const user = new User();
user.name = "John Doe";
user.age = 30;
await entityManager.save(user);
console.log(user.id); // 输出一个唯一的 ID 值
@PrimaryGeneratedColumn()
必须只能用于数字类型的字段,例如 int
、bigint
、smallint
等。@PrimaryGeneratedColumn()
来定义 ID,则必须将该字段定义为实体类的属性,而不能是 getter 或 setter 方法。@PrimaryGeneratedColumn()
自动生成 ID,则默认将该字段设为主键和自动递增。但是,在其他数据库中,需要手动为该字段设为主键和自动递增,例如 PostgreSQL 中需要使用序列来实现自动递增。在这种情况下,需要传入两个参数 primary
和 generated
来指定该字段为主键和自动递增,例如 @PrimaryGeneratedColumn({ primary: true, generated: "increment" })
。@PrimaryGeneratedColumn("uuid")
来生成 UUID 类型的 ID,则需要手动为该字段创建 UUID 扩展,在数据初始化时运行 CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
。TypeORM 提供了简单易用的自动递增 ID 功能,可以轻松生成唯一的 ID 值,方便我们在数据操作中使用。我们只需要使用 @PrimaryGeneratedColumn()
装饰器即可实现自动递增 ID,而不需要了解数据库底层的具体实现。