【无标题】

创建个 Nest 项目

bash 复制代码
nest new nest-typeorm -p npm

创建一个 crud 的模块:

bash 复制代码
nest g resource user

引入 typeorm

bash 复制代码
npm install --save @nestjs/typeorm typeorm mysql2

修改 app.modules.ts

forRoot 方法解析

forRoot、register、forFeature 这三个是注册动态模块的三种方式

  • forRoot 用于在**根模块(AppModule)**中注册一个模块的全局配置。通常只调用一次,用于创建全局单例。上述配置就是告诉 NestJS 启动时要创建一个 TypeORM 连接。

  • registerforRoot 类似,通常用于需要"多实例"多次调用或"局部配置"的场景。

    ts 复制代码
    @Module({
      imports: [
        CacheModule.register({ ttl: 5 }),    // A模块
        CacheModule.register({ ttl: 60 }),   // B模块
      ],
    })
  • forFeature 通常用于那些支持模块分片加载的库模块 , 例如:TypeOrmModuleMongooseModule。这些模块一般通过 forRoot 注册全局连接,再通过 forFeature 注册具体的实体(Entity)或模型(Model)。

    ts 复制代码
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql',
          host: 'localhost',
          username: 'root',
          password: '123456',
          database: 'test',
          synchronize: true,
        }),
        TypeOrmModule.forFeature([User]), // 注册实体
      ],
      providers: [UserService],
    })
    export class UserModule {}

修改 User Entity

ts 复制代码
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity({
  name: 'sanshi_user',
})
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({
    name: 'sanshi_name',
    length: 50,
  })
  name: string;
}

执行 npm run start

增删改查

修改 user.service.ts 来完成对数据库的增删改查操作。

通过在 UserService 注入 EntityManager 来完成对应操作。

ts 复制代码
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectEntityManager } from '@nestjs/typeorm';
import { EntityManager } from 'typeorm';
import { User } from './entities/user.entity';

@Injectable()
export class UserService {
  @InjectEntityManager()
  private manager: EntityManager;

  create(createUserDto: CreateUserDto) {
    return this.manager.save(User, createUserDto);
  }

  findAll() {
    return this.manager.find(User);
  }

  findOne(id: number) {
    return this.manager.findOne(User, { where: { id } });
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    return this.manager.save(User, { id, ...updateUserDto });
  }

  remove(id: number) {
    return this.manager.delete(User, { id });
  }
}

执行 npm run start:dev。


通过 postman 进行新增操作

服务端可以看到对应日志


查询所有

查询单个


修改


删除


优化

因为使用的是通过 @InjectEntityManager 来注入的 entityManager 对象,所以每个 api 都需要带上对应的 Entity。

这个时候可以通过前边提到的 forFeature 来做一个优化。

在 user.module.ts 中做对应修改: 在 user 模块引入 TypeOrmModule.forFeature 对应的动态模块,传入 User 的 Entity

然后在 userService 中就可以注入 Repository,从而使用各个 api 的时候就不需要单独传入 User Entity 了。

相关推荐
皮皮林5519 分钟前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
不会敲代码138 分钟前
TCP/IP 与前端性能:从数据包到首次渲染的底层逻辑
前端·tcp/ip
kyriewen1 小时前
奥特曼借GPT-5.5干杯,而你的Copilot正按Token收钱
前端·github·openai
AC赳赳老秦1 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
kyriewen1 小时前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
前端·javascript·设计模式
千寻girling2 小时前
《 Git 详细教程 》
前端·后端·面试
之歆3 小时前
DAY08_CSS浮动与行内块布局实战指南(下)
前端·css
0xDevNull3 小时前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
GetcharZp3 小时前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端
yqcoder3 小时前
CSS Position 全解析:5 种定位模式详解
前端·css