【无标题】

创建个 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 了。

相关推荐
李姆斯12 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
戮漠summer13 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
名字还没想好☜13 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司13 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
江华森14 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒14 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
长不胖的路人甲15 小时前
SpringCloud 服务雪崩、熔断、降级
后端·spring·spring cloud
Jackson__15 小时前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby15 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
青禾网络15 小时前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github