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方法便可以接受一个空对象作为参数了。如下面所示:
··