学无先后,达者为师

网站首页 java综合 正文

mybatis使用Integer类型查询可能出现的问题_java

作者:ypp91zr   更新时间: 2022-05-16 java综合

使用Integer类型查询出现的问题

mapper.xml :

比如:


                    and  m.state = #{page.entity.state}
                

当state这个值为0的时候

mybatis为默认为空字符串"",所以如果状态这种类似的场景有0值得,查询就不要加上xxxx!=""这种。或者or xxx==0

代码示例:

1、


     and  m.state = #{page.entity.state}

2、


    and  m.state = #{page.entity.state}

mybatis判断Integer遇到的bug

场景产出

需要查出状态为0的所有用户

我是这样写的

1.mapper:

BaseUser selectUserByStatus(@parm("status") Integer status);

这里传了0进去

2.sql:

SELECT * FROM base_user WHERE status=0

3.xml片段


    status = #{status},

4.结果真正执行的sql

SELECT * FROM base_user

小结一下:

test="status != null and status != ''"这个是拿来判断String的!!!也就是说Double,BigDecimal等数字类型也会出现这样的情况

1.如果是Integer类型的话,如果变量的值是0,即 num = 0, mybatis在进行 num != '' " 的时候会认为  num 的值是空字符串;直接跳过判断了

所以如果是Integer类型只需要判断 != null 即可

2.如果String类型需要判断不等于0,则需要写name != '0'.toString(),否则会报错。

原文链接:https://blog.csdn.net/ypp91zr/article/details/84581161

栏目分类
最近更新