原生mysql与mybatis执行update语句的差异

在做一个解除绑定的接口中,发现了这个一个问题:

连续对接口进行测试,发现一直fan返回解除成功,但是逻辑上应该是解除之后,在解除它后就应该回显已解除绑定才对

就一直找原因,sql中使用的是mybatis的update进行的一个逻辑删除

然后将update的结果与0比较嘛,大于0,说明更改并影响了一条记录,则返回true

第二次执行update后,影响行数应该是0对吧,与0进行比较应该返回false,但是偏偏就是返回的true,说明什么,说明他有影响行,但是我使用原生的mysql写sql测试,影响行数就是为0.

至此我真是百思不得其解,反复地查找资料,最后终于找到了原因。

以下是我从这个博主的帖子找到的原因,写的很清楚。

重大补充 :最近发现update操作使用返回的的影响行数来判断操作成功与否,有时候还与第三方持久化框架有关

使用原生的sql(或者mysql) 重复请求update操作的时候,如 update test set cid = '5244';执行两次的时候发现,update返回影响行数为0

但是使用mybatis的时候,结果却不是这样的,执行两次的时候,发现update返回的影响行数始终是1。 spring + mybatis 方法 update 的返回值 默认:是 Rows matched 不是 rows affected(或者Changed)。后面跟踪发现,原来mybatis这个第三方持久化框架返回来的是被匹配的影响行数,所以返回的始终是1,那如果想要以返回的行数作为判断结果,需要在mybatis连接数据库的时候加上参数,

jdbc:mysql://{jdbc.host}/{jdbc.db}?useAffectedRows=true

获取matched行数

默认情况下,返回的就是matched 行数。也就是查询条件匹配的行数


mysql update 返回更新结果 sql更新并返回
https://blog.51cto.com/u_16099336/7307246​​​​​​​

相关推荐
lsc_blog5 小时前
年终自评别贴提交记录,把技术产出讲成变化
数据库·面试·职场和发展·跳槽·求职招聘
FungLeo8 小时前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
Zan13 小时前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试
这个DBA有点耶14 小时前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
aiks_yuan14 小时前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
SelectDB15 小时前
列式存储为什么适合分析类负载?原理、限制与日志场景应用
数据库
数据库小学妹15 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
爱吃奥利奥_wen16 小时前
SQL Server 基础语法详解:从建库建表到约束与增删改查
服务器·数据库·oracle
这个DBA有点耶17 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范