mybatis中动态标签「if」没有生效的原因

    技术2022-07-11  93

    一、问题:

    <if test="carrier != null and carrier !='' and carrier !='0'"> AND CARRIER = #{carrier} </if>

    我们在接口设置传入的字段类型为String,要在carrier字段不为null,空字符串,和”0“的时候增加以上条件,但是以上当carrier等于"0"时,上述代码并不生效。

    二、原因 mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。

    三、解决办法:

    换成双引号 <if test='carrier != null and carrier !="" and carrier !="0"'> AND CARRIER = #{carrier} </if> 加toSting() <if test="carrier != null and carrier !='' and carrier !='0'.toString()"> AND CARRIER = #{carrier} </if>

    四、总结

    单个的字符要写到双引号里面或者使用.toString()才行!

    Processed: 0.009, SQL: 9