一文带你搞懂nestjs中的remove()&inster()&save()&create()
建议您在开发中使用 remove和inster来操作数据库!
remove()&delete()区别
当我们在删除数据的时候最好使用remove(),remove()可以一次性删除单个或多个实例,注意删除的是实例不是数据,并且remove()可以触发BeforeRemove和AfterRemove钩子;
当我们触发钩子函数的时候 我们可以在此之前把用户要删除的数据放到数据库中的另外一个表中去存储。
示例:
await repository.remove(user)
await repository.remove([user1,user2,user3])
钩子函数示例:
这些钩子函数是写在实体类中的
//删除函数
async remove(id:number) {
// return this.userRepository.delete(id);
const user =await this.findOne(id);
return this.userRepository.remove(user);
}
@AfterInsert()
afterInsert(){
console.log('afterInsert',this.id,this.username);
}
@AfterRemove()
afterRemove(){
console.log('afterRemove');
}
delete可以一次性删除单个或者多个id实例,或者给定条件;
delete方法是硬删除,直接把数据从数据库中抹除了,不建议
await repository.delete(1)
await repository.delete([1,2,3])
await repository.delete({username: toimc })
save()&create()&insert()
在TypeORM中,save()
、create()
和insert()
是用来在数据库中创建新记录的方法,它们之间有一些区别:
-
在TypeORM中,
create()
方法用于创建一个新的实体实例,但不会将其保存到数据库中。这个方法的主要作用是初始化实体对象的属性,并为之后的保存操作做准备。通过create()
方法创建的实体对象可以在之后通过save()
或insert()
方法保存到数据库中,或者进行其他操作。例如,您可以使用
create()
方法初始化一个实体对象,然后修改一些属性的值,最后再通过save()
方法将其保存到数据库中:const newUser = userRepository.create({ name: "John", age: 30, email: "john@example.com" }); // 修改属性 newUser.age = 31; // 保存到数据库 await userRepository.save(newUser);
这样,
create()
方法可以帮助您方便地初始化一个实体对象,并对其属性进行设置,为之后的操作做准备。因此,
create()
方法的作用在于创建一个新的实体实例,但不会触发数据库操作。相反,它为之后的保存操作提供了方便的实体对象。 -
save()
:save()
方法用于将一个已经存在的实体对象保存到数据库中,或者更新数据库中的已有记录。例如:
await userRepository.save(newUser);
这段代码将之前创建的newUser
实体保存到数据库中。
insert()
:insert()
方法用于将一个新的记录直接插入到数据库中,而不需要先创建实体对象。例如:
await userRepository.insert({
name: "Alice",
age: 25,
email: "alice@example.com"
});
这段代码将一个新的记录直接插入到数据库中,而不需要先创建一个实体对象。
因此,这三种方法在TypeORM中用于创建新记录,但它们的具体用途略有不同。create()
用于创建实体对象而不保存到数据库,save()
用于保存已存在的实体对象,insert()
用于直接将新记录插入到数据库中。