在TypeORM中使用实体@Entity与字段@Column注解

在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()注解中传入表名字段。

// 表名: my_todo_list
@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;

// int型普通字段
@Column("int")
user_id: number;

// tinyint型普通字段
@Column('tinyint') 
is_finish: boolean;

@Column()
title: string;

支持的字段类型(mysql/mariadb):

// Column types for 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,可以指定字段的类型、大小等待属性:

// 指定为 int 类型
@Column("int")
// or
@Column({ type: "int" })

// 指定为 varchar 类型, 长度200个字符
@Column("varchar", { length: 200 })
// or
@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';

// 表名为: my_todo_list
@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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Web后端技术

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值