MybatisPlus使用LambdaQueryWrapper更新时 int默认值问题

问题:

java 复制代码
User user = new User();
        user.setBalance(1000);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username","Jack");
        userMapper.update(user, queryWrapper);

通过用户名,更新金额,使用queryWrapper,出现了多更新其他字段的问题。

原因

User实体类中,存在int属性,int属性具有默认值0,在执行userMapper.update(user, queryWrapper);

语句时,user中除了我们set的Balance外,还存在一个int字段status的默认值是0,也会被update语句扫描加载并执行

powershell 复制代码
 ==>  Preparing: UPDATE user SET status=?, balance=? WHERE (username = ?)
 ==> Parameters: 0(Integer), 1000(Integer), Jack(String)

解决方案

将User实体类中的int属性改为Integer

java 复制代码
//    private int status;
//    private int balance;
    private Integer status;
    private Integer balance;

问题分析

int:

  • int是32位 有符号的以二进制补码表示的整数
  • 最小值是-2147483648(-2^31)
  • 最大值是 2147483647(2^31-1)
  • 一般的整形变量默认为int类型
  • 默认值是0

Integer

Integer类包含四种常量:

  • MAX_VALUE:值为2^31-1的常量,表示int类型能够表示的最大值
  • MIN_VALUE:值为-2^31的常量,表示int类型能够表示的最小值
  • SIZE:用来以二进制补码形式表示int值的比特位数
  • TYPE:表示基本类型int的class实例

总结

  • int类型是基本数据类型,Integer是引用数据类型
  • Integer是int类型的包装类,int的初始值是0,Integer的初始值是null
相关推荐
wuyk5556 分钟前
Python 第三章:列表 List
服务器·开发语言·python
Evand J35 分钟前
【MATLAB例程,车联网7】CACC网联车辆协同控制:ACC对比、V2X时延丢包与队列稳定性,附例程下载链接
开发语言·matlab·车联网
Lam Tang1 小时前
APS 系列文章 08
java·代理模式
要努力点1 小时前
Python入门第六课
开发语言·python
萧瑟余晖2 小时前
Java深入解析篇三十三之消息队列
java·开发语言
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
IT爱学堂2 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能
C++ 老炮儿的技术栈2 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
xcLeigh2 小时前
Go入门:无类型常量与类型常量的区别
服务器·开发语言·golang
泡沫冰@2 小时前
GO 语言基础
开发语言·算法·golang