实体就是应用里的某种东西,比如内容、评论、用户,这些都可以看成是应用里的实体。实体会对应数据仓库里的一个数据表,也就是如果我们创建了一个用户实体,在数据仓库里就会创建一个对应的用户数据表。
下面我们可以在命令行生成一个实体,在终端,项目所在目录的下面,执行 npm run gt 生成一个实体,名字是 user,放在 user/entities 这个目录里面。
回到项目观察一下,在 user/entities 目录下面会有个 user.entity,另外还有一个 user.entity.subscriber,这个东西是 user 这个实体的订阅者,在这个订阅者里面,你可以在创建、更新删除用户数据的时候安排去做一些事情。
回到 user 实体,这个实体类要用 @Entity 装饰一下,这里 name 属性设置成了 user,这样就会在数据仓库里创建一个叫 user 的数据表。
现在这个实体类里面有个 id 属性,类型是 number,这个属性用 @PrimaryGeneratedColumn 装饰了一下,这样它就会是 user 这个数据表里的主键,默认就是自动增加的 id 。
配置实体
打开 user 模块,这里我们要在模块的 imports 里面,添加一个 TypeOrmModule 用一下 forFeature,提供一个数组,里面添加一个 UserEntity。因为我们配置 TypeOrm 模块的时候,把那个 autoLoadEntities 设置成了 true,所以这里只要在模块里这样配置以后,就会自动加载这个 User 实体。
默认在这里注册的实体只能在这个模块内部使用,如果你想在这个模块以外使用这个实体,需要在模块里面重新导出这个 TypeOrmModule 模块,用一个 exports ,一个数组,里面添加一个 TypeOrmModule。
另外要注意的是,实体的订阅者,要在模块的 providers 这里注册一下。
数据库客户端
再打开数据库客户端,观察一下应用的数据仓库,你会发现,应用的数据仓库里已经有了一个 user 数据表,现在这个数据表里只有一个 id 字段。
增加字段
现在我想在这个 user 数据表里添加两个新的属性,name 还有 password,分别存储用户的名字还有密码。在这个 user 实体里面,用 @Column 装饰一个属性,名字是 name? 类型是 string,下面再添加一个属性,同样使用 @Column 装饰一下,名字是 password? 类型也是 string。
保存一下实体文件,因为配置 TypeOrm 模块的时候,我们把 synchronize 设置成了 true,所以实体文件有变化以后,对应的数据表也会有变化。
在数据库客户端,再观察一下,现在这个 user 数据表里会出现 name 还有 password 字段,打开数据表的结构,你会发现,id 的类型是 int,name 还有 password 字段的类型都是 varchar 。