安装依赖
pnpm i @nestjs/typeorm typeorm mysql2 --save
TypeOrmModule中使用
使用TypeOrmModule的时候,有时候会直接从app.module.ts中注入:
TypeOrmModule.forRoot({ type: 'mysql', host: 'xxx', port: xx, username: 'xxx', password: 'xxx.', database: 'xxx', synchronize: false, logging: true, entities: [], poolSize: 10, connectorPackage: 'mysql2', extra: { authPlugin: 'sha256_password', },}),
这个时候我们如果要读取一些数据库的敏感信息变量的时候,当然可以重新封装一个database之类的modules之后,再在app.moudule.ts中注入
不过简单快速的使用的话,可以使用 forRootAsync 异步注入即可:
import { Global, Logger, Module } from '@nestjs/common'; import { UserModule } from './user/user.module'; import { ConfigModule, ConfigService } from '@nestjs/config'; import * as config from 'config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ormconfig } from '../ormconfig'; @Global() @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, // 是否是全局模块 }), TypeOrmModule.forRoot(ormconfig), UserModule, ], controllers: [], providers: [Logger], exports: [Logger], }) export class AppModule {} export class AppModule {}
注意一下有个imports字段是手动导入了ConfigModule。如果把 ConfigModule 的 isGlobal 配置设置为true的话,那么就不需要我们每次都去import了。
ormconfig.ts文件
import { User } from '@/entitys/User'; import { TypeOrmModuleOptions } from '@nestjs/typeorm'; import * as config from 'config'; const database = config.get('database'); const { type, host, port, username, password, db, synchronize } = database; const ormconfig = { type, host, port, username, password, database: db, // entities: [__dirname + '/entitys/*{.ts,.js}'], //扫描本项目中.entity目录文件 // entities: ['/dist/src/entitys/*{.ts,.js}'], synchronize, //定义数据库表结构与实体类字段同步(这里一旦数据库少了字段就会自动加入,根据需要来使用) logging: ['error'], autoLoadEntities: true, // 自动加载实体 } as TypeOrmModuleOptions; export { ormconfig };
使用typeorm-model-generator根据表生成实体
"db": "npx typeorm-model-generator -h localhost -d vite_node -p 3306 -u root -x 123456 -e mysql -o ./src/entities --noConfig true --ce pascal --cp camel -a"
npx typeorm-model-generator :如果全局安装了,npx就不用
-h localhost :ip
-d vite_node :数据库名字
-p 3306 :数据库端口号
-u root :用户名
-x 123456 :密码
-e mysql :什么数据库
-o ./src/entities :生成实体的地址
–noConfig true :表示不生成ormconfig.json和tsconfig.json文件
–ce pascal :类名转换成首字母大写的驼峰命名
–cp camel :将数据库中的字段也转换成驼峰命名,比如user_role转换成userRole
-a:表示实体会继承BaseEntity的类
类如User,关于一些注解的说明。
@PrimaryGeneratedColumn:主键id
@ApiProperty:关于这个字段的说明
@Column:
nullable:是否可以为空。
name:此字段表示在数据库中的列名,类如驼峰命名转换:login_name ——> loginaName。
select:查询时是否返回此字段
@Exclude:使用此注解时,可以实现对返回的数据过滤掉此列,需要在controller层对某一个方法上加上注解 @UseInterceptors(ClassSerializerInterceptor)对应@Exclude()列,表示此列隐藏。
@OneToMany:一对多的关系
使用接口生成实体
import { CREATE_ENTITY } from '@/contanst'; import { Injectable } from '@nestjs/common'; import { exec } from 'child_process'; const create = () => { return new Promise((resolve, reject) => { return exec(CREATE_ENTITY, (error, stdout, stderr) => { if (error) { reject(error); } else { resolve('成功'); } }); }); }; @Injectable() export class CentityService { async createEntity() { try { const result = (await create()) as any; if (result) { return { code: 200, message: '生成成功', }; } else { return { code: 300, message: '生成失败' + result, }; } } catch (e) { return { code: 300, message: '生成失败' + e, }; } } }
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接