复现异常
select
from t_student
AND id IN
#{item}
AND name LIKE CONCAT('%', #{name}, '%')
AND sex = #{sex}
AND selfcard_no = #{selfcardNo}
该配置问题出在 这段代码,sex 在传入的参数中是 Byte 类型,属于数值类型,而 sex != '' 适用于字符串类型判断,我们误将数值类型当成字符串类型配置了。
当我们错误的配置了 sex 字段的判断条件,传入 sex = 0 时,sex != '' 会返回 false,传入 sex = 1 时,sex != '' 会返回 true,同样是传入数字,为什么会出现两种不同的结果呢?
sex = 0 的执行效果如下图所示:

sex = 1 的执行效果如下图所示:

sex &#

当MyBatis中的查询条件为Byte等数值类型时,错误地使用字符串判断(如sex != '')会导致问题。例如,sex=0时条件不生效,原因是OGNL表达式处理时将0和空字符串视为相同。正确的做法是仅判断sex != null。文章通过源码分析揭示了这个问题的本质。
最低0.47元/天 解锁文章
1325

被折叠的 条评论
为什么被折叠?



