实体

实体是一个映射到数据库表的类

可以通过定义一个新类来创建一个实体,并用@Entity()标记:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

// 定义一个实体
@Entity()
export class Test {
// 定义一个自增id
@PrimaryGeneratedColumn('uuid')
id: number;

// 定义一个列
@Column()
name: string;

@Column()
password: string;

@Column()
age: number;
}

列相当于实体中的属性

主键

自增主键:

1
2
@PrimaryGeneratedColumn()
id: number

自增uuid:

1
2
@PrimaryGeneratedColumn('uuid')
id: number

列类型

给列指定详细的类型,和mysql类型是对应的

1
2
3
4
5
6
7
8
9
@Column({ type: 'varchar', length: 200 })
password: string

@Column({ type: 'int'})
age: number

// 日期专用的装饰器
@CreateDateColumn({ type: 'timestamp' })
create_time: Date

自动生成列

插入数据时会自动生成内容

1
2
@Generated('uuid')
uuid:string

枚举类

当列的字段只应有几个既定值时使用

1
2
3
4
5
6
7
8
9
@Column({
// 需要指定属性type为'enum',否则会报错
type:'enum',
// 属性enum的值可以是TS枚举,也可以是数组
enum:['1','2','3','4'],
// 指定默认值
default:'1'
})
xx: string

列选项

常用的列选项:

1
2
3
4
5
6
7
8
9
10
11
12
@Column({
type: 'varchar',
name: 'ip', // 数据库表中的列名
nullable: true, // 在数据库中使列NULL或NOT NULL(能否为空),默认为false
comment: '注释',
select: true, // 在进行查询时是否显示此列;若为false,字段将被过滤,不返回给用户;默认为true
default: 'xxxx', // 数据库级列的DEFAULT值
primary: false, // 将列标记为主要列,使用方式和@PrimaryColumn相同
update: true, // "save"操作是否更新列值;若为false,只能在第一次插入对象时编写该值;默认为true
collation: '', // 定义列排序规则
})
ip: string;

所有选项:Column options

simple-array列类型

特殊列类型simple-array,可以将原始数组值存储在单个字符串列中,之中所有值都以逗号分隔(JSON数组)

之中存放的数组项不应该含有逗号,否则可能会出现数组切割的问题

1
2
3
4
5
6
7
8
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;

@Column('simple-array')
names: string[];
}

simple-json列类型

特殊列类型simple-json,可以将对象转换为json字符串,并存储在数据库中,反之亦可

用于数据库中没有json类型、却又需要存储和加载对象的场景

1
2
3
4
5
6
7
8
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;

@Column("simple-json")
profile: { name: string; nickname: string };
}