在TypeORM中使用实体@Entity与字段@Column注解
客观存在并相互区别的事物称为实体(Entity)。
实体是一个抽象名词,是指一个独立的事物个体,自然界的一切具体存在的事物都可以看做一个实体。
就数据库而言,实体往往指某类事物的集合。
比如MySQL数据库中,一个表todo
的结构如下:
CREATE TABLE `todo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL DEFAULT '',
`description` text NOT NULL,
`views` int(11) unsigned NOT NULL DEFAULT '0',
`is_star` tinyint(4) NOT NULL DEFAULT '0',
`is_finish` tinyint(11) unsigned NOT NULL DEFAULT '0',
`create_time` int(11) unsigned NOT NULL DEFAULT '0',
`update_time` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
TypeORM 中定义一个实体类,对应一个数据库的表(或MongoDB的集合),可以通过 @Entity()
注解实现.
默认的,类名应该和表名一直,比如以下示例中的class名为Todo
, 表名对应为todo
。
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Todo {
@PrimaryGeneratedColumn()
id: number;
@Column('int')
user_id: number;
@Column({ length: 255 })
title: string;
@Column('text')
description: string;
@Column('tinyint')
is_finish: boolean;
@Column('int')
create_time: number;
@Column('int')
update_time: number;
}
如果实体类名和表名不一致,可以在@Entity()
注解中传入表名字段。
@Entity('my_todo_list')
获取一条记录结果:
{
"id": 12,
"user_id": 112233,
"title": "learn TypeORM",
"description": "hello,TypeORM",
"views": 2,
"is_star": false,
"is_finish": 0,
"create_time": 1545198789,
"update_time": 1545198789
}
实体的列表(Columns)
@PrimaryColumn()
id: number;
@PrimaryGeneratedColumn()
id: number;
@Column("int")
user_id: number;
@Column('tinyint')
is_finish: boolean;
@Column()
title: string;
支持的字段类型(mysql/mariadb):
int, tinyint, smallint, mediumint, bigint, float, double, dec,
decimal, numeric, date, datetime, timestamp, time, year, char,
varchar, nvarchar, text, tinytext, mediumtext, blob, longtext,
tinyblob, mediumblob, longblob, enum, json, binary, geometry,
point, linestring, polygon,
multipoint, multilinestring, multipolygon,
geometrycollection
@Column()
注解中,可以传入一个Object
,可以指定字段的类型、大小等待属性:
@Column("int")
@Column({ type: "int" })
@Column("varchar", { length: 200 })
@Column({ type: "varchar", width: 200 })
有的时候,我们接口返回值和数据库字段不是一一对应的。
如果想要实体名称与表字段名称不同, 设置name
属性即可:
@Column({type:'int', name: 'user_id'})
userId: number;
@Column({type:'int', name: 'create_time'})
createTime: number;
@Column({type:'tinyint', name: 'is_finish'})
isFinish: boolean;
修改后代码如下:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity('my_todo_list')
export class Todo {
@PrimaryGeneratedColumn()
id: number;
@Column({type:'int', name: 'user_id'})
userId: number;
@Column({ length: 255 })
title: string;
@Column('text')
description: string;
@Column({type:'int', name: 'is_finish'})
isFinish: boolean;
@Column({type:'int', name: 'create_time'})
createTime: number;
@Column({type:'int', name: 'update_time'})
updateTime: number;
}
获取一条记录结果:
{
"id": 12,
"userId": 112233,
"title": "learn TypeORM",
"description": "hello,TypeORM",
"views": 2,
"isStar": false,
"isFinish": 0,
"createTime": 1545198789,
"updateTime": 1545198789
}
参考链接:
http://typeorm.io/#/entities/column-types-for-mysql--mariadb
[END]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)