typeorm更新之save与update、updateById
发布日期:2021-05-28 16:24:08 浏览次数:27 分类:技术文章

本文共 2811 字,大约阅读时间需要 9 分钟。

save方法与update、updateById这三个方法都有更新数据库的作用,其中save方法在何时会更新何时会保存已经实验过了,现在主要区分一下这几个方法的使用

 

1.最正常的更新,更新一个已存在实体:

实体:

 

import { Entity , PrimaryGeneratedColumn , Column ,PrimaryColumn} from 'typeorm'@Entity()export class User{    @PrimaryColumn({        type:'int'    })    id:number    @Column({        type:'varchar'    })    name:string}

upadte:

 

 

import { createConnection,Repository } from 'typeorm'import { User } from './User'createConnection({    name:'test',    type: 'mysql',    host: 'localhost',    port: 3306,    username: 'root',    password: '123456',    database: "test",    synchronize:true,    dropSchema:true,    charset:'UTF8',    entities: [        User    ]}).then(async (connection)=>{    let userRepository = connection.getRepository(User)    let user = userRepository.create({id:1,name:'张三'})    let result = await userRepository.save(user)    console.log(user)    let result1 = await userRepository.update(user,{name:'李四'})    console.log(user)    console.log(result1)})

输出:

 

 

User { id: 1, name: '张三' }User { id: 1, name: '张三' }undefined

可以看到,update与insert一样,都是直接对数据库执行操作,不返回数据,也不对被更新实体进行更改

 

updateById:基本与update一样,也不返回任何东西

save:

 

then(async (connection)=>{    let userRepository = connection.getRepository(User)    let user = userRepository.create({id:1,name:'张三'})    let result = await userRepository.save(user)    console.log(user)    let result1 = await userRepository.save({id:1,name:'李四'})    console.log(user)    console.log(result1)})

输出:

 

 

User { id: 1, name: '张三' }User { id: 1, name: '张三' }{ id: 1, name: '李四' }

 

save方法会返回更新后的实体,当然也就是它操作的实体

save方法的更新功能不是明确指定的,而是在其内部进行判断执行的,这是与update方法最主要的区别,在save中会有一个加载执行实体的步骤

2.不正常更新,更新不存在的实体

update:

 

then(async (connection)=>{    let userRepository = connection.getRepository(User)    let user = userRepository.create({id:1,name:'张三'})    let result = await userRepository.save(user)    let result1 = await userRepository.update({id:2},{name:'李四'})    console.log(result1)})

输出:undefined

 

这里有些出乎意料,因为更新不存在实体,竟然没有报错,其实数据库本身就是这样的设定:

 

update user set name="李四" where id=1;

输出:

 

 

Query OK, 1 row affected (0.12 sec)Rows matched: 1  Changed: 1  Warnings: 0

可见,在数据库中执行更新,会返回收到影响的行数

 

如果更新不存在的行:

 

update user set name="李四" where id=2;

输出:

 

 

Query OK, 0 rows affected (0.00 sec)Rows matched: 0  Changed: 0  Warnings: 0

此时,受到影响、匹配的行都为0,但是没有报错,这个特性延续到了update方法

upadteById:与update方法一样

 

save:当操作不存在于数据库实体时,会直接保存,没必要演示了

 

3.不正常的更新,更新id

update:

 

then(async (connection)=>{    let userRepository = connection.getRepository(User)    let user = userRepository.create({id:1,name:'张三'})    let result = await userRepository.save(user)    let result1 = await userRepository.updateById(1,{id:2,name:'李四'})    console.log(result1)})

此时数据库为:

 

 

+----+--------+| id | name   |+----+--------+|  2 | 李四   |

说明update方法,可以更改id

updateById:与update方法一样

 

save:无法做到更改数据id,id改变后只能将实体作为新数据插入,这是一个很大而且基本没啥用的区别

 

 

转载地址:https://blog.csdn.net/qq_27868061/article/details/79315866 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:typeorm删除之remove与delete
下一篇:typeorm插入之save与insert

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年10月07日 15时43分44秒