查看原文
其他

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

素文宅博客 Java精选 2022-08-09
>>号外:关注“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 面试题,值得收藏!

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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存