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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年10月07日 15时43分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UI控件拖动失效
2019-06-07
ubutun 安装php7.1x
2019-06-07
java中 SSL认证和keystore使用
2019-06-07
Test
2019-06-07
AlvinZH的学霸养成记II——1032
2019-06-07
Java 自动装箱与拆箱(Autoboxing and unboxing)
2019-06-07
CAS Tomcat实现单点登录
2019-06-07
Spring 使用中的设计模式
2019-06-07
linux-命令全集
2019-06-07
JavaFx导出文件
2019-06-07
HDOJ 1878 欧拉回路 nyoj 42一笔画问题
2019-06-07
杭店 ACM 1864 最大报销额 01背包
2019-06-07
C语言链表练习2
2019-06-07
自用论文排版组合 = LyX2.2.2 + TeXLive2016
2019-06-07
Java在后台获取USB二维码扫描枪扫描的内容
2019-06-07
tp5使用外部类的三种方法
2019-06-07
C#- 操作Ini文件
2019-06-07
(转)Android教程之如何使用自定义字体
2019-06-07
easy-mock 本地部署(挤需体验三番钟,里造会干我一样,爱象节款mock)
2019-06-07
数据结构之堆
2019-06-07