mybatis-plus if test失效-integer类型为0的数据

问题:

中奖状态 win_status(0 未中奖 1 已中奖) 字段是tinyint类型,winStatus是Integer。想通过条件查询中奖的数据和没有中奖的数据,但是传入winStatus == 0 时,预期是查询所有未中奖的数据,但是if test标签并没有生效,查询的依然是全部数据。

原代码(错误代码)

 <where>
            <if test="winStatus != '' and winStatus != null">
                AND atjl.win_status = #{winStatus}
            </if>
</where>

原因解析

integer winStatus = 0 类型的变量,在mybatis中的if test 条件中,会将Integer = 0的参数默认为 ''(空串),即Integer winStatus = ' ',所以 <if test=" winStatus != ' ' and winStatus != null"> 中的 winStatus != ' ' 被判定为false,if test不被执行,所以查询条件没有拼接,最终查询出来的依然是全部的数据。

解决方法

方法一:

去掉 winStatus != ' '
winStatus是整类,前端传递空字符串的时候一般会判定不传此参数,最后后端接收的是null,可以选择直接去掉。

修改后的代码

<where>
            <if test="winStatus != null">
                AND atjl.win_status = #{winStatus}
            </if>
</where>

方法二

保险一点 的方法

<where>
            <if test="winStatus != null and winStatus != '' or winStatus == 0">
                AND atjl.win_status = #{winStatus}
            </if>
</where>

参考文章,感谢感谢!
https://blog.csdn.net/u012204058/article/details/102518777?ops_request_misc=&request_id=&biz_id=102&utm_term=if-test%20%E5%AD%97%E6%AE%B5%E7%AD%89%E4%BA%8E0%20%E6%97%A0%E6%95%88&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-102518777.142v52pc_rank_34_queryrelevant25,201v3control_2&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值