实体类
实体是一个映射到数据库表(或使用 MongoDB 时的集合)的类,用@Entity()来标记。实体由列和关系组成,每个实体必须有一个主列,例如:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity('table_name')
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
isActive: boolean;
}
如果要为User实体使用替代表名,可以在@ Entity中指定:@Entity(“my_users”)。
实体列
实体列映射到数据库表列,用@ Column、@PrimaryColumn()等修饰符标记实体类的属性。
@ Column一般数据库表列@PrimaryColumn()创建一个主列,它可以获取任何类型的任何值。@PrimaryGeneratedColumn()创建一个主列,该值将使用自动增量值自动生成。@PrimaryGeneratedColumn("uuid")创建一个主列,该值将使用uuid自动生成。@CreateDateColumn是一个特殊列,自动为实体插入日期。@UpdateDateColumn是一个特殊列,在每次调用实体管理器或存储库的save时,自动更新实体日期。@VersionColumn是一个特殊列,在每次调用实体管理器或存储库的save时自动增长实体版本(增量编号)。
列类型
列类型是特定于数据库类型的 - 这为数据库架构提供了更大的灵活性。 你可以将列类型指定为@ Column的第一个参数 或者在@Column的列选项中指定。如:
@Column("int")
@Column({ type: "int" })
@Column({ type: "int", length: 200 })
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上指定列选项:
@Column({
type: "varchar",
length: 150,
unique: true,
// ...
})
firstName: string;
当类属性名称和数据库表中的类名不一样时,可以通过name选项指定数据库表中的列名。如类名称是firstName,数据库表中是first_name。
以下是全部列选项:
type: ColumnType- 列类型。其中之一在上面.name: string- 数据库表中的列名,默认是类属性名称。length: number- 列类型的长度。 例如,如果要创建varchar(150)类型,请指定列类型和长度选项。width: number- 列类型的显示范围。 仅用于MySQL integer typesonUpdate: string-ON UPDATE触发器。 仅用于 MySQL.nullable: boolean- 在数据库中使列NULL或NOT NULL。 默认情况下,列是nullable:false。update: boolean- 指示"save"操作是否更新列值。如果为false,则只能在第一次插入对象时编写该值。 默认值为"true"。select: boolean- 定义在进行查询时是否默认隐藏此列。 设置为false时,列数据不会显示标准查询。 默认情况下,列是select:truedefault: string- 添加数据库级列的DEFAULT值。primary: boolean- 将列标记为主要列。 使用方式和@ PrimaryColumn相同。unique: boolean- 将列标记为唯一列(创建唯一约束)。comment: string- 数据库列备注,并非所有数据库类型都支持。precision: number- 十进制(精确数字)列的精度(仅适用于十进制列),这是为值存储的最大位数。仅用于某些列类型。scale: number- 十进制(精确数字)列的比例(仅适用于十进制列),表示小数点右侧的位数,且不得大于精度。 仅用于某些列类型。zerofill: boolean- 将ZEROFILL属性设置为数字列。 仅在 MySQL 中使用。 如果是true,MySQL 会自动将UNSIGNED属性添加到此列。unsigned: boolean- 将UNSIGNED属性设置为数字列。 仅在 MySQL 中使用。charset: string- 定义列字符集。 并非所有数据库类型都支持。collation: string- 定义列排序规则。enum: string[]|AnyEnum- 在enum列类型中使用,以指定允许的枚举值列表。 你也可以指定数组或指定枚举类。asExpression: string- 生成的列表达式。 仅在MySQL中使用。generatedType: "VIRTUAL"|"STORED"- 生成的列类型。 仅在MySQL中使用。hstoreType: "object"|"string"-返回HSTORE列类型。 以字符串或对象的形式返回值。 仅在Postgres>)中使用。array: boolean- 用于可以是数组的 postgres 列类型(例如 int [])transformer: { from(value: DatabaseType): EntityType, to(value: EntityType): DatabaseType }- 用于将任意类型EntityType的属性编组为数据库支持的类型DatabaseType。
实体的使用
实体都必须在连接选项中注册,或者你可以指定包含所有实体的整个目录, 该目录下所有实体都将被加载:
import { createConnection, Connection } from "typeorm";
import { User } from "./entity/User";
const connection: Connection = await createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: [User] // or entities: ["entity/*.js"]
});
连接选项
如果需要查看typeorm执行的sql,可以将logging选项设为true。
以下是全部连接选项:
type- 数据库类型。你必须指定要使用的数据库引擎。该值可以是"mysql","postgres","mariadb","sqlite", "better-sqlite3","cordova","nativescript","oracle","mssql","mongodb","sqljs","react-native"。此选项是必需的。name- 连接名。 在使用getConnection(name: string)或ConnectionManager.get(name: string)时候需要用到。不同连接的连接名称不能相同,它们都必须是唯一的。如果没有给出连接名称,那么它将被设置为"default"。extra- 要传递给底层驱动程序的额外连接选项。如果要将额外设置传递给基础数据库驱动程序,请使用此配置。entities- 要加载并用于此连接的实体。接受要加载的实体类和目录路径。目录支持 glob 模式。示例:entities: [Post, Category, "entity/*.js", "modules/**/entity/*.js"]。了解有关entities的更多信息。subscribers- 要加载并用于此连接的订阅者。接受要加载的实体类和目录。目录支持 glob 模式。示例:subscribers: [PostSubscriber, AppSubscriber, "subscriber/*.js", "modules/**/subscriber/*.js"]。了解有关subscribers的更多信息。entitySchemas- 要加载并用于此连接的实体架构。接受要加载的实体模式类和目录。目录支持 glob 模式。示例:entitySchemas: [PostSchema, CategorySchema, "entity-schema/*.json"。了解有关Entity Schemas的更多信息。migrations- 要加载和用于此连接的迁移。接受要加载的迁移类和目录。目录支持 glob 模式。 示例:migrations: [FirstMigration, SecondMigration, "migration/*.js", "modules/**/migration/*.js"]. 了解有关 Migrations的更多信息。logging- 指示是否启用日志记录。如果设置为true,则将启用查询和错误日志记录。你还可以指定要启用的不同类型的日志记录,例如["query", "error", "schema"]。详细了解Logging。logger- 记录器,用于日志的记录方式。可能的值是"advanced-console", "simple-console" 和 "file"。默认为"advanced-console"。你还可以指定实现Logger接口的记录器类。详细了解Logging。maxQueryExecutionTime- 如果查询执行时间超过此给定的最大执行时间(以毫秒为单位),则 logger 将记录此查询。namingStrategy- 命名策略,用于命名数据 库中的表和列。了解有关Naming strategies的更多信息。entityPrefix- 给此数据库连接上的所有表(或集合)加的前缀。dropSchema- 每次建立连接时删除架构。请注意此选项,不要在生产环境中使用它,否则将丢失所有生产数据。但是此选项在调试和开发期间非常有用。synchronize- 指示是否在每次应用程序启动时自动创建数据库架构。 请注意此选项,不要在生产环境中使用它,否则将丢失所有生产数据。但是此选项在调试和开发期间非常有用。作为替代方案,你可以使用 CLI 运行 schema:sync 命令。请注意,对于 MongoDB 数据库,它不会创建模式,因为 MongoDB 是无模式的。相反,它只是通过创建索引来同步。migrationsRun- 指示是否在每次启动应用程序时自动运行迁移。或者,您可以使用 CLI run migrations:run commandmigrationsTableName- 数据库中将包含有关已执行迁移的信息的表的名称。默认情况下,此表名为"migrations"。cache- 启用实体结果缓存。你还可以在此处配置缓存类型和其他缓存选项。阅读更多有关caching的信息。cli.entitiesDir- CLI 默认情况下创建实体的目录。