转自:https://blog.csdn.net/benben683280/article/details/79645697

update操作

返回值

mybatis执行update()方法默认返回为匹配的更新记录条数,现在需要将update()方法修改为与mysql执行一致返回影响条数,修改jdbc连接如下即可:添加useAffectedRows=true配置

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

具体解释

假设有如下一张表以及两条数据: 

我们来编写一个简单的单元测试用例来验证下,首先使用 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.db}?useAffectedRows=true
我们对我们的数据库连接配置稍做修改,添加 useAffectedRows 字段: 

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


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

【转载】mybaits的update、Insert、delete返回的是不是受影响的行数?相关推荐

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

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

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

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

  3. SQL Server返回插入数据的ID和受影响的行数

    首先看看数据库里面的数据(S_Id为自增长标识列): sql server 中返回上一次插入数据的ID(标识值)有三种方式: 第一种 @@IDENTITY: 1 insert into Student ...

  4. SQL返回受影响的行数

    最近做了一个功能需要知道对数据库做增删改操作是否成功,理我想那么我只要获取对数据库做操作后获取受影响的行数即可,因为如果成功的话,会返回受影响的行数. 可是怎么获取? (1)使用hibernateTe ...

  5. SQL存储过程返回受影响的行数

    在很多时候,使用存储过程,不需要返回数据集, 但是经常想知道存储过程是否对数据库有影响: 这些,只需要将下列数据放在你需要统计的语句后面即可: select @@ROWCOUNT

  6. mysql受影响的行 0_为什么更新/删除成功时受影响的行返回0?

    我有声明: INSERT INTO infotbl(name, phone) VALUES('Alex', '9999999'); 并更新它: UPDATE infotbl SET name = 'A ...

  7. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  8. oracle中update,insert,delete的高级用法

    一.对视图的更新. update,insert,delete除了可以作用于单表,还可以作用于视图.子查询,但是有种种限制. 视图(子查询)的限制:   1.没有集合操作符(并.差.交): 2.没有DI ...

  9. oracle中执行某sql语句后,如一系列delete、update等操作,怎么看影响的行数?如我执行了n个表的delete语句,得看我删除了多少数据,万一sql写的有问题,误删了数据,不是灾难?

    oracle中执行某sql语句后,如一系列delete.update等操作,怎么看影响的行数?如我执行了n个表的delete语句,得看我删除了多少数据,万一sql写的有问题,误删了数据,不是灾难? 使 ...

最新文章

  1. 2018/11/29 一个64位操作系统的设计与实现 02 (安装nasm)
  2. 了解了解一下SQLSERVER里的鬼影记录
  3. 工业互联网 — TSN — Overview
  4. dalvik 与art 区别
  5. cf修改游戏客户端是什么意思_微信codm什么意思 微信codm 小飞机 落!什么意思[多图]-游戏攻略...
  6. python解决https私密连接警告信息
  7. linux java no x11_在linux下运行javaMail程序报No X11 DISPLAY variable was...
  8. mysql php状态函数_mysql常用的信息函数
  9. 开始使用Pyhton
  10. Linux学习笔记B站狂神说(自己总结方便复习)
  11. gg修改器修改数值没有用怎么办_gg修改器怎么用教学 gg修改器修改游戏方法介绍...
  12. 慎用!网传一公司用微软雅黑和盗版PS损失近3000万
  13. 【小白学习之路】Java实现简单的飞机大战小游戏
  14. 谷歌图片验证码的使用图文详解附源码
  15. win7连接xp共享打印机方法
  16. android ios mp4格式转换,ios格式转换器|iphone视频格式转换器免费版 7.1 - 系统天堂...
  17. 解决elementui的el-dialog 对话框 屏幕放大缩小不变形问题
  18. 绕过tp路由器管理密码_TP路由器怎么重启 TP-Link无线路由器重启方法【详细介绍】...
  19. source insight无法识别函数定义
  20. jenkins连接外部k8s集群

热门文章

  1. 从Trade.dll到Tradex.dll,程序化交易接口的前世今生
  2. AI智慧安监EasyCVR视频融合平台告警列表支持按时间查询告警消息
  3. FreeRTOS 解析
  4. ZF2小TIP:使用事件驱动为模块快速设置模板
  5. 如何用遗传算法重现女神照片
  6. 电容屏和电磁屏 一:电阻式触摸屏 二:电容式触摸屏以及原理 三:电磁感应触摸屏 PDF电磁屏签名: 签名完成后,点坐转化文件: android 开发 实现网页跳转
  7. python数据分析(1)——获取微信好友的统计信息
  8. 编写程序,模拟购物---学习通
  9. 电力物联网应用软件开发
  10. 【航天远景 MapMatrix 精品教程】01概述