typeorm装饰器之Entity

本文介绍了一个实体装饰器的实现方式,展示了如何通过不同的参数配置来创建数据库表,并提供了多个示例说明实体装饰器的使用方法。
src/decorator/entity/Entity.ts

 
import {getMetadataArgsStorage} from "../../index";
import {TableMetadataArgs} from "../../metadata-args/TableMetadataArgs";
import {EntityOptions} from "../options/EntityOptions";

//实体装饰器工厂方法声明
export function Entity(options?: EntityOptions): Function;

//第一个参数为实体表名
export function Entity(name?: string, options?: EntityOptions): Function;

//工厂方法方法实现
export function Entity(nameOrOptions?: string|EntityOptions, maybeOptions?: EntityOptions): Function {
    //获取选项
    const options = (typeof nameOrOptions === "object" ? nameOrOptions as EntityOptions : maybeOptions) || {};
    //表名
    const name = typeof nameOrOptions === "string" ? nameOrOptions : options.name;
    //返回装饰器
    return function (target: Function) {
        //表元数据参数
        const args: TableMetadataArgs = {
            //实体类构造函数
            target: target,
            //表名
            name: name,
            //类型
            type: "regular",
            //查询结果默认排序
            orderBy: options && options.orderBy ? options.orderBy : undefined,
            //引擎
            engine: options && options.engine ? options.engine : undefined,
            //所属数据库,可以覆盖连接选项中的数据库
            database: options && options.database ? options.database : undefined,
            //schema,个别数据库支持
            schema: options && options.schema ? options.schema : undefined,
            //是否跳过同步,即连接如果设置为 synchronize: true时,是否跳过同步这个表
            skipSync: !!(options && options.skipSync === true)
        };
        //添加元数据参数
        getMetadataArgsStorage().tables.push(args);
    };
}

 

测试1:

 

import {Column, Entity} from "../../../src/index";
import {PrimaryColumn} from "../../../src/decorator/columns/PrimaryColumn";
import {Generated} from "../../../src/decorator/Generated";

@Entity()
export class Post {

    @PrimaryColumn("integer")
    id: number;
}


表结构:

 

 

+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                               |
+-------+------------------------------------------------------------------------------------------------------------+
| post  | CREATE TABLE `post` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------------+

默认情况下,表名为实体名小写

 

 

测试2:

 

import {Column, Entity} from "../../../src/index";
import {PrimaryColumn} from "../../../src/decorator/columns/PrimaryColumn";
import {Generated} from "../../../src/decorator/Generated";

@Entity('post_test')
export class Post {

    @PrimaryColumn("integer")
    id: number;
}

表结构:

 

 

+-----------+-----------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                    |
+-----------+-----------------------------------------------------------------------------------------------------------------+
| post_test | CREATE TABLE `post_test` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+-----------------------------------------------------------------------------------------------------------------+

第一个参数为字符串,则为表名

 

 

测试3:

 

import {Column, Entity} from "../../../src/index";
import {PrimaryColumn} from "../../../src/decorator/columns/PrimaryColumn";
import {Generated} from "../../../src/decorator/Generated";

@Entity({
    name:'post_test1',
    engine:'myisam'

})
export class Post {
    @PrimaryColumn("integer")
    id: number;
}

表结构:

 

 

+------------+------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                     |
+------------+------------------------------------------------------------------------------------------------------------------+
| post_test1 | CREATE TABLE `post_test1` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+------------+------------------------------------------------------------------------------------------------------------------+

当第一个参数为对象时,则为选项,name属性为表名,设置了引擎为MyISAM,只有mysql支持引擎

测试4:

 

 

import {Column, Entity} from "../../../src/index";
import {PrimaryColumn} from "../../../src/decorator/columns/PrimaryColumn";
import {Generated} from "../../../src/decorator/Generated";

@Entity({
    name:'post_test1',
    engine:'myisam',
    skipSync:true

})
export class Post {
    @PrimaryColumn("integer")
    id: number;
}

这个实体跳过了连接的同步步骤,没有生成表


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值