typeORM学习
1.什么是Entity?
Entity是一个类,被抽象映射为数据库的table,假如使用Mogodb数据库的话,那么就对应为collection。
1  | /* user.entity.ts */  | 
通常的,每一个Entity都必须得包含有columns以及relations,并且必须包含有一个primary column(如果使用mongodb的话那么就必须包含有ObjectId column)。一般应用中都会包含多个Entity,每个Entity都必须在connection options里面被注册相关连接实际数据库的事宜。
1  | import { createConnection, Connection } from "typeorm";  | 
前面也提到了Entity是一个装饰类,Entity能够接受可选的参数作为对table的配置,比如table的name,如下所示:
1  | ("users")  | 
上面就是创建一个叫做名字叫做users的table,更具体的,一些常见的配置如下所示:
1  | ({  | 
既然table由columns组成,那么Entity也是由columns构成。@column装饰类将会把字段数据给映射成database table column。而column分为了很多种:primary columns;special columns;spatial columns。其中,任何一个entity都必须包含至少一个primary column,并且primary column又分为了下面几个部分:
- PrimaryColumn:创建一个任意类型任意值的primary column,当然你也可以指出column的类型.
 - PrimaryGeneratedColumn:自动创建一个自增的int类型的primary column。在保存之前我们无需对他手动赋值,他会被自动生成。
 - PrimaryGeneratedColumn(“uuid”):自动创建一个独一无二的string类型的primary column,保存之前无需手动赋值,会被自动生成。
 
1  | ()  | 
2.typeORM之@nestjs/typeorm基本介绍
要想在nestjs项目中使用typeORM的话,第一步至少需要安装@nestjs/typeorm typeorm以及database的npm包(比如mysql package),第二步就是在整个应用的根模块中import我们这个TypeOrmModule,如下所示:
1  | // app.module.js  | 
forRoot方法是用来干嘛用的?它就好比typeORM的createConnection()方法一样,并且他们之间所接受的参数格式也是一模一样的,如果参数为空的话,那么配置参数将会从根目录中的ormconfig.json里面读取。forRoot对象里面各个参数的意义如下所示:
- 1.type:数据库类型,可选值有,”mysql”, “postgres”, “mariadb”, “sqlite”, “cordova”, “nativescript”, “oracle”, “mssql”, “mongodb”, “sqljs”, “react-native”,必选字段;
 - 2.name:连接名,默认名是”default”,每个连接的名字必须唯一。连接名在哪里会用上?比如getConnection(name: string)以及ConnectionManager.get(name: string)中;
 - 3.synchronize: 开发过程可用来debug,生产过程严禁使用,否则容易造成数据库数据丢失;
 - 4.entities: 被加载进来以及进行使用的数据库建模文件;可使用正则匹配。
 - 5.其他配置参数可参考typeORM官方文档。
 
之前还提到了ormconfig.json配置,形如下面:
1  | {  | 
在使用了ormconfig.json配置后,那么forRoot方法便可以接受一个空对象作为参数了。如下面所示:
··