很多猿在撸码时都会对update、delete、insert等返回结果进行判断,若返回数量大于0则继续后续步骤,这样可以一定程度上确保数据一致性。但是不经意间也会引发别的问题。那么你在撸码过程中是否碰到过如下问题?
public int updateByPrimaryKey(User user) {
insertLog(selectByPrimaryKey(user.getUserId()), UPDATE, "更新前: ");
int count = userMapper.updateByPrimaryKey(user);
insertLog(user, UPDATE, "更新后: ");
return count;
}
以上代码根据count判断,如果count>0则继续,否则通知用户修改失败。
同样的数据在预生产环境流程可以继续向下,可是在生产环境却被阻断。debug发现预生产环境返回1,生产环境返回0,所以造成阻断。
经过系列测试发现mysql配置是一样的。查阅资料发现可以针对jdbcUrl进行属性配置来解决这个问题。(未对比数据库版本是否有影响)
useAffectedRows:是否用受影响的行数替代查找到的行数来返回数据。
在实际项目过程中其实可以通过另一种方式解决,不再对update返回结果进行判断,如果修改失败,那么一般情况下是会有异常发生,所以对于返回结果的判断并不是必要的。当然如果业务要求判断,那么就可以使用useAffectedRows来进行一致化处理。
System.out.println("我叫update");
int count = update();
if(count > 0){
System.out.println("完蛋了");
}else{
System.out.println("更加完蛋了"):
}
当然如果有别的解决方式欢迎各位探讨。