声明模型
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 | 追踪更新时间 |