MyBatis 真坑!Integer 类型赋值 0 ,当 != '' 时无法通过判断执行 SQL 语句

>>号外:关注“Java精选”公众号,回复“2021面试题”关键词,领取全套500多份Java面试题文件。

开发微信小程序“Java精选面试题”后台管理系统时,遇到根据状态判断是或否发布。

MySQL数据库中设计数据库表,其中某字段status使用tinyint数据类型,当修改状态的时候,赋值status属性的值为0,用于改变状态记录试题库中发布情况。

但是通过Debug模式查看Controller控制层明显已经获取到status等于0,但是在执行到MyBatis中xml文件SQL语句时,总是无法赋值成功,xml配置如下:

<update id="updateWarehouse" parameterType="Warehouse">
    update t_warehouse 
    <set>
        <if test="title != null and title != ''">title = #{title},</if>
        <if test="code != null and code != ''">code = #{code},</if>
        <if test="content != null and content != ''">content = #{content},</if>
        <if test="status != null and status != ''">status = #{status},</if>
        <if test="parentId != null and parentId != ''">parentId = #{parentId}</if>
    </set>
    where id = #{id}
</update>

分析:

通过分析表面上没有任何传参问题,通过上网查询MyBatis相关资料,终于弄明白什么原因。

此行代码中

<if test="status != null and status != ''">status = #{status},</if>

and status != '',MyBatis中传参status的值为0时,因为数据类型为Integer类型,判断为false值。

MyBatis认定 0 = ''的,因此判断status != ''为false,这导致修改试题信息时状态值无法改变为0。

正确写法:

<update id="updateWarehouse" parameterType="Warehouse">
    update t_warehouse 
    <set>
        <if test="title != null and title != ''">title = #{title},</if>
        <if test="code != null and code != ''">code = #{code},</if>
        <if test="content != null and content != ''">content = #{content},</if>
        <if test="status != null">status = #{status},</if>
        <if test="parentId != null and parentId != ''">parentId = #{parentId}</if>
    </set>
    where id = #{id}
</update>

往期精选  点击标题可跳转

Spring 中 IService 有多个实现类,它是如何知道该注入哪个 ServiceImpl 类?

突然慌了!面试官问:线程池中多余的线程是如何回收的?

MySQL 数据库中百万级数据量,大神是如何分页查询?

数据库中 SQL 语句使用索引,还是很慢?可能是这几点原因

Spring Boot 框架中实现跨域访问的五种解决方案,你懂了吗?

面试官问:导致 Spring 事务失效的场景有哪些,如何解决失效问题?

推荐 IntelliJ IDEA 特别“养眼”的主题插件,这几款超赞,总有一款适合你!

京东面试官问:LEFT JOIN 关联表中用 ON 还是 WHERE 跟条件有什么区别?

IDEA 超全面的设置及功能优化,效率那是杠杠的!

还在用 System.out.println("") 输出日志到控制台吗?那么太 Low 了!

Intellij IDEA 2020.3 如何配置注释模板,让你瞬间提高出一个逼格?

推荐 2021 年 Java 超经典的 25 道 MyBatis 面试题,值得收藏!

点个赞,就知道你“在看”!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值