📜  typeorm 自动递增 id (1)

📅  最后修改于: 2023-12-03 15:20:42.807000             🧑  作者: Mango

TypeORM 自动递增 ID

简介

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 实体,它有三个字段:idnameageid 使用 @PrimaryGeneratedColumn() 装饰器标记为自动生成的主键。

当我们存储一个新用户时,TypeORM 将会自动为 id 字段生成一个唯一的递增值。例如:

const user = new User();
user.name = "John Doe";
user.age = 30;
await entityManager.save(user);
console.log(user.id); // 输出一个唯一的 ID 值
注意事项
  • @PrimaryGeneratedColumn() 必须只能用于数字类型的字段,例如 intbigintsmallint 等。
  • 如果使用 @PrimaryGeneratedColumn() 来定义 ID,则必须将该字段定义为实体类的属性,而不能是 getter 或 setter 方法。
  • 在 MySQL 数据库中,如果使用 @PrimaryGeneratedColumn() 自动生成 ID,则默认将该字段设为主键和自动递增。但是,在其他数据库中,需要手动为该字段设为主键和自动递增,例如 PostgreSQL 中需要使用序列来实现自动递增。在这种情况下,需要传入两个参数 primarygenerated 来指定该字段为主键和自动递增,例如 @PrimaryGeneratedColumn({ primary: true, generated: "increment" })
  • 在 PostgreSQL 数据库中,如果使用 @PrimaryGeneratedColumn("uuid") 来生成 UUID 类型的 ID,则需要手动为该字段创建 UUID 扩展,在数据初始化时运行 CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
结论

TypeORM 提供了简单易用的自动递增 ID 功能,可以轻松生成唯一的 ID 值,方便我们在数据操作中使用。我们只需要使用 @PrimaryGeneratedColumn() 装饰器即可实现自动递增 ID,而不需要了解数据库底层的具体实现。