update语句的返回值是什么

14 篇文章 0 订阅

update语句的返回值是什么
执行一条update语句,执行成功后返回值是 1 ,所以就理所当然的认为返回的是受影响的行数,
但是当你再次执行这条update语句时,按正常的逻辑,数据已存在,更新不会成功,应当返回 0,但是返回值依旧
是 1 (已测试过),所以返回值并不是受影响的行数,查看别人的文章,得知返回值是matched记录数(匹配到的行数)
如果想设置返回值是受影响的行数,修改数据库链接配置:增加 useAffectedRows=true  即可
 

 

 

mybatis 中的 update 返回值你真的明白吗

96豆豆先生的小屋 关注

1.1 2018.03.10 22:35* 字数 544 阅读 10893评论 0喜欢 5

如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗?

函数定义

验证之前我们先看看数据库中的数据记录。总共两条数据记录!

数据记录

数据库链接配置为:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=123456

下面看看我们的单元测试类。

 

单元测试类

我们根据 ID 获取记录,然把用户名由 root 改为 root001。如果说返回值是影响的行数的话,那么应该返回 1.跟我们的预期结果 1 是相符的。单元测试会通过。

单元测试通过

单元测试通过,我们看看数据库中的记录有没有变化。

数据库记录

看起来貌似没有任何问题。单元测试通过,数据库的确是只有一条记录更改了。这说明 mybatis 的 update 操作返回值的确是受影响的行数。

真的是这样吗

我们知道当数据库中的记录被修改之后,我们在次执行相同的 update 语句将不会影响到数据记录行数。

按照这个逻辑来讲的话,在此执行此单元测试,返回值应该为 0,跟我们的预期值 1 不同,单元测试应该不通过。再次运行单元测试:

单元测试通过

我去,单元测试居然神奇般的通过了。。。请注意看,我们在命令行执行 update 语句那张图,返回的 matched 数量为 1。所以默认情况下,mybatis 的 update 操作的返回值是 matched 的记录数,并不是受影响的记录数。

那么有没有办法让 mybatis 的 update 操作的返回值是受影响的行数呢。因为我们业务逻辑中有时会根据这个返回值做业务判断。答案当然是有的。
修改数据库链接配置为:增加了 useAffectedRows 字段信息。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useAffectedRows=true
jdbc.username=root
jdbc.password=123456

再次运行单元测试:

单元测试失败

从报错信息可以清晰的看出,返回值是 0,跟我们的预期值 1 不同。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值