MyBatis解析Integer=0的问题分析

MyBatis解析Integer=0的问题分析

  • 本质原因:OGNL表达式对空字符串的解析了

在使用Mybatis解析Integr=0或者Float或者Double时的解析问题

先说解决方法:

 <if test="flag != null and flag != '' ">
    `flag ` = #{flag ,jdbcType=Integer}
 </if>

直接将上面的SQL代码改为下面即可

 <if test="flag != null ">
    `flag ` = #{flag ,jdbcType=Integer}
 </if>

原因:mybatis在进行SQL语句的拼接和判断时,将对象解释为布尔值任何对象都可以在需要布尔值的地方使用。OGNL将对象解释为布尔值,如下所示:如果对象是布尔值,则提取并返回其值;如果对象是数字,则将其双精度浮点值与零进行比较;非零为真,零为假;如果对象是字符,当且仅当其字符值为非零时,其布尔值为真;否则,它的布尔值为true,当且仅当它为非null时。为假的时候,不进行拼接SQL语句,所以导致判断失败,只要String的长度等于0的话,最终都会被解析为0.0,所以不仅是Integer类型,Float型,Double型都会遇到类似的问题

本质原因:OGNL表达式对空字符串的解析了

你可能感兴趣的:(mybatis,mybatis,java,mysql)