2-2:使用MikroORM进行CRUD操作(respository)

3 阅读1分钟

1.配置

app.module.ts中导入配置

// app.module.ts
import mikroConfig from '../mikro-orm.config';
@Module({
  imports: [MikroOrmModule.forRoot(mikroConfig)],
})
export class AppModule {}

然后就可以在需要用到crudservice进行依赖注入

import { InjectRepository } from '@mikro-orm/nestjs';

@Injectable()
export class TodosService {
  constructor(
    private readonly em: EntityManager,
  ) {}

  // ...
}

Respository

在ORM中,一个repository通常负责一个实体对应的数据表。更准确的说,respository是ORM提供的一个数据层访问对象,用来封装某个实体的查询,创建更新删除等数据库操作。 在对应的module写入要绑定的实体类

import { Module } from '@nestjs/common';
import { TodosService } from './todos.service';
import { TodosController } from './todos.controller';
import { MikroOrmModule } from '@mikro-orm/nestjs';
import { Todo } from './entities/todo.entity';

@Module({
  imports: [MikroOrmModule.forFeature([Todo])],
  controllers: [TodosController],
  providers: [TodosService],
})
export class TodosModule {}

然后就可以在使用到repositoryservice中注入我们想使用的实体类的repository

import { EntityManager, EntityRepository } from '@mikro-orm/postgresql';
import { Todo } from './entities/todo.entity.js';
import { InjectRepository } from '@mikro-orm/nestjs';
@Injectable()
export class TodosService {
  constructor(
    private readonly em: EntityManager,
    @InjectRepository(Todo)
    private readonly todoRepository: EntityRepository<Todo>,
  ) {}
}

查询全部

async findAll(){
    return await this.todoRepository.findAll();
}

查询单个

async findOne(id:number){
    const todo =  await this.todoRepositort.findOne(id);
    if(!todo){
        throw new NotFoundException();
    }
    return todo;
}

创建

async create(createTodoDto:Create){
    const todo = this.todoRespository.create(createTodoDto);
    await this.em.flush();
    return todo;
}

修改

update(id:number,updateTodo:UpdateTodo){
    const todo = await this.findOne(id);
    this.em.assign(todo,);
    await this.em.flush();
    return todo;    
}

删除

async remove(id){
    const todo = await this.findOne(id);
    this.em.remove(todo);
    await this.em.flush();
    return todo;
}