typeorm是TypeScript的一个对象关系映射器,可以和Nest.js框架结合使用
- 安装依赖
npm install --save @nestjs/typeorm typeorm mysql2
- 插件市场安装Database Client插件
- 新建一个数据库(demo)
-- Active: 1681047696387@@127.0.0.1@3306 CREATE DATABASE `demo` DEFAULT CHARACTER SET = 'utf8mb4';
- 在app.module.ts中连接数据库
import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ // 使用TypeOrmModule的forRoot方法,传入一个包含数据库信息的对象 TypeOrmModule.forRoot({ type: 'mysql', //数据库类型 username: 'root', //账号 password: '123456', //密码 host: 'localhost', //host port: 3306, // database: 'demo', //库名 // entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件(因为有最后一行所以这行可以不需要) synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库 retryDelay: 500, //重试连接数据库间隔 retryAttempts: 10, //重试连接数据库的次数 autoLoadEntities: true, //如果为true,将自动加载实体 forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中 }), ], controllers: [AppController, DemoController], providers: [AppService], })
- 定义实体,本例中我用nest g res test新建了一个目录,因此我们在test.entity.ts中定义。实体中的内容会被typeorm解析成对应的sql语句
import { Entity, Column, PrimaryColumn } from 'typeorm'; // 实体装饰器 @Entity() // 类名会变成数据库中的Table名 export class Test { // 自增列(唯一id) @PrimaryGeneratedColumn() id: string; // 普通列 @Column() name: string; @Column() password: string; @Column() age: number; }
- 在test.module.ts里关联实体
import { Module } from '@nestjs/common'; import { TestService } from './test.service'; import { TestController } from './test.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Test } from './entities/test.entity'; @Module({ // 这里调用forFeature方法,注意不是forRoot imports: [TypeOrmModule.forFeature([Test])], controllers: [TestController], providers: [TestService], }) export class TestModule {}
完成以上步骤后,使用npm run start:dev即可,数据库中可以看到新建的Test表