到底 update 返回值代表什么呢?我们来验证一下便知道了,假设有如下一张表以及两条数据:

我们来编写一个简单的单元测试用例来验证下,首先使用 mybatis 简单的写个 mapper 进行更新操作,其中 xml 中的内容为:

数据库连接配置为:

接来下,我们来编写一个简单的单元测试来验证下: update 的返回值是不是受影响的记录的条数 ,对应的单元测试代码如下:

由单元测试代码可以得知,我们将要把数据库中两条记录的 phone 字段的值由 12345678 修改为 66666666 ,正常情况下, resultCode 将会返回 2 。因为 update 操作影响到数据库中这 2 条记录,这和我们期望 2 是相符合的。那么一切正常的情况下,这次单元测试将会通过,那么我们运行看看结果:

单元测试通过了,再查看数据库中的记录:

这说明 mybatis 的 update 更新操作返回值的确是返回受影响的行数……真的是这样吗?

我们知道,当数据库中的记录被修改之后,再次执行重复的 update 操作将不会影响到新的行数,为了验证我说的话,我们试试:

那么,按照这个逻辑:我们再次执行这个单元测试应该是, resultCode 返回的应该是 0 ,和我们的期望的数字 2 不一致,将会导致测试不通过。再次运行单元测试:

居然还是 passed ,看到这里聪明的你已经看出来了, 默认情况下,mybatis 的 update 操作返回值是记录的 matched 的条数,并不是影响的记录条数。
严格意义上来将,这并不是 mybatis 的返回值,mybatis 仅仅只是返回的数据库连接驱动(通常是 JDBC )的返回值,也就是说,如果驱动告知更新 2 条记录受影响,那么我们将得到 mybatis 的返回值就会是 2 和 mybatis 本身是没有关系的。
道理我都懂,如果我们非得要 mybatis 的 update 操作明确的返回受影响的记录条数,有没有什么办法呢?
当然是有的。
通过对 JDBC URL 显式的指定 useAffectedRows 选项,我们将可以得到受影响的记录的条数:

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

我们对我们的数据库连接配置稍做修改,添加 useAffectedRows 字段:

此时,mybatis 的 update 操作返回的应该是受影响的条数了,我们再次运行单元测试试试看:

update 操作返回的是受影响的记录条数,我们知道为 0 和我们预期的 2 不一致,自然而然单元测试不通过。

Mybatis Update操作 返回值修改为受影响条数相关推荐

  1. MyBatis的update返回值改为受影响的行数

    MyBatis的update返回值改为受影响的行数 一.背景: 项目中经常通过update的SQL语句进行更新数据,而在目前的框架中,mybatis是主流的框架,所以理解update的真实的返回值也显 ...

  2. 关于Mybatis的insert方法返回值(将返回值受影响条数改为插入后的自增主键id)

    今天做ssm项目的时候有一个这样的需求--我借阅一本书然后生成一条借阅记录(借阅记录的主键是递增的"borrowNum"),然后将这条记录的主键返回,在往上查阅资料后知道,只要在对 ...

  3. mybatis之update返回响应条数/受影响行数(如果更新数据与原数据一致则返回0)

    需求:笔者最近有一个需求是这样的,每个机柜每1分钟都会发一个心跳包,这个心跳包的数据如果和mysql数据库存在的数据一样,那么就不要更新了,直接给我返回一个0,我会根据这个0判断要不要存入这个心跳日志 ...

  4. Mybatis执行update,insert等语句返回的不是受影响的行数

    Mybatis执行update,insert等语句返回的不是受影响的行数 在我们日常开发中,使用Mybatis框架中,经常会根据update,或者其他操作的返回值判断执行是否成功. 如: 在执行以上语 ...

  5. MySQL 修改时返回受影响行数为 0

    刚刚在测试接口时,修改一直提示提交失败,很奇怪,之前跟移动端联调接口时,也偶尔会出现这样的问题,sql 确定没问题,怎么就提交失败呢?因为是偶尔出现的情况而且不知道怎么复现,就安慰自己说是可能有什么机 ...

  6. ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)

    数据库操作返回值总结 0. 前言 1. Db类操作数据库 1.1 新增 1.2 更新 1.3 删除 1.3.1 单条删除 1.3.2 批量删除 1.4 查询 1.4.1 单笔记录 1.4.2 多笔记录 ...

  7. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  8. MyBatis更新语句返回值

    mybatis返回值为匹配的行数,若想改为受影响行数加jdbc.url后加上 &useAffectedRows=true

  9. 执行update语句,返回受影响行数为0的几种情况

    首先我们都很清楚执行update语句,返回的结果是受影响的行数这是要先说的, 其次本人遇到执行update语句返回0的情况有两种 1.Update的sql语句中的where条件不成立时,返回结果是0 ...

最新文章

  1. 密码技术应用--SM4文件加解密
  2. Effective Java之使类和成员的可访问性最小化(十三)
  3. electron增加导航按钮_Electron发布6.0 Released版本
  4. 《天天数学》连载08:一月八日
  5. 禅道程序员的10条原则--转载--为了不忘
  6. QSerialport多线程方法
  7. html5 超链接 图像映射,链接图像
  8. hdu -1251 统计难题(字典树水题)
  9. 家庭局域网_KODI超强的局域网视频播放软件
  10. 漏洞挖掘——实验9 SQL Injection Attack Lab
  11. 【雅思大作文考官范文】——第十五篇:'high salaries' essay
  12. python爬取胡歌相关视频弹幕,分析并制作词云
  13. Vue 表情输入组件,微信face表情组件
  14. commvault备份mysql_CommVault备份到华为云对象存储实践
  15. ImageSelector
  16. Harbor私有镜像仓库——高可用
  17. 怎样用万用表检查线路是短路还是接地?
  18. 生活 list.php,拓展学生识字空间,在生活中自主识字a href=/friend/list.php(教师中心专稿)/a...
  19. 【.Net实用方法总结】 整理并总结System.Data中DataRow类及其方法介绍
  20. 百度副总裁李硕:数字技术加持下中国劳动力成本上升是好事

热门文章

  1. 大班幼儿告状行为与教师教育态度和方法的研究
  2. 给人一杯水,自己要有一桶水;
  3. dns-服务器--转发设置-域控dns配置
  4. 【go】结合一个go开源项目分析谷歌浏览器cookie为什么不安全 附go项目导包失败怎么解决教程
  5. 【IPD】集成产品开发培训课程「3月4-5日」
  6. 共享汽车管理系统软硬件开发设计
  7. 从黑车到市值400亿美元,Uber在北美如何对抗政府禁令 (2)
  8. Android名片扫描识别系统SDK
  9. 基于4G的物联网税控解决方案
  10. 【正点原子Linux连载】 第十九章 CAN Bus 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2