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
相关推荐
咖啡八杯42 分钟前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵1 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code4 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121314 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城5 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源