Skip to content

声明模型

IBest-ORM 通过将 Class 实体类通过装饰器 @Table()、@Field() 来映射到数据库表。来简化数据库交互。了解如何定义模型,是充分利用IBest-ORM全部功能的基础。

模型定义

模型是使用 @Table 装饰类定义的。 这些类可以包含具有基本类型,甚至是自定义类型。

参考以下 user 模型的示例:

ts
@Table
export class User {
	@Field({ name: "id", type: FieldType.INTEGER, tag: ['primaryKey', 'autoIncrement', 'notNull'] })
  	ID?: number
	
  	@Field({ type: FieldType.TEXT })
  	Name?: string
  
  	@Field({ type: FieldType.INTEGER })
  	Age?: number
}

在此模型中:

  • 通过 @Table 装饰器,可以将 User 类标记为数据表。
  • 通过 @Field 装饰器,可以将类中的属性映射到数据库表的字段。
  • 使用 @Table({name: 'users'}) 装饰器,可以自定义数据表名,如不指定,则默认使用实体类名。
  • 在 @Field 装饰器中,可通过 type 来指定数据类型,通过 name 来指定字段名称,还可以通过 tag 属性来指定字段约束和扩展属性。

约定

  • 主键:IBest-ORM 默认使用一个名为 ID 的字段作为每个模型的默认主键。
  • 列名:如果在 @Field 装饰器中未指定字段名称,则会自动将字段名称转换为 snake_case 作为数据库中的列名。
  • 时间字段:IBest-ORM 使用字段 CreatedAt 和 UpdatedAt 来自动跟踪记录的创建和更新时间。

遵循这些约定可以大大减少您需要编写的配置或代码量。 但是,IBest-ORM 也具有灵活性,允许您根据自己的需求自定义这些设置。 您可以在约定文档中了解更多关于自定义这些约定的信息。

Model

IBest-ORM 提供了一个预定义的实体,名为Model,其中包含常用字段:

ts
export abstract class Model {
  	@Field({ type: FieldType.INTEGER, tag: ['primaryKey', 'autoIncrement', 'notNull'] })
  	ID?: number

  	@Field({ type: FieldType.TEXT, tag: ['autoCreateTime', 'notNull'] })
  	CreatedAt?: string

  	@Field({ type: FieldType.TEXT, tag: ['autoUpdateTime', 'notNull'] })
  	UpdatedAt?: string
}

可以直接在您的实体中继承 Model ,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用内置约定非常有用。 包含的字段:

  • ID:每个记录的唯一标识符(主键)。
  • CreatedAt:在创建记录时自动设置为当前时间。
  • UpdatedAt:在更新记录时自动设置为当前时间。

IBest-ORM 约定使用 CreatedAt、UpdatedAt 追踪创建/更新时间。如果您定义了这种字段,在创建、更新时会自动填充 当前时间。

要使用不同名称的字段,您可以配置 autoCreateTime、autoUpdateTime 标签。

字段标签

标签名说明
primaryKey定义为主键
notNull字段不为空
autoIncrement自增列
autoCreateTime追踪创建时间
autoUpdateTime追踪更新时间