Mybatis中动态查询的if test条件判断的单引号和双引号解析问题

319 阅读1分钟

mybatis 中使用if判断时,应该区分整型和字符型

mybatis使用的OGNL表达式,所以单个的字符要写到双引号里面才行 '0'会被解析成字符Char,java是强类型的,传进来的是String,Char 和 一个String会导致不等,所以if标签不会执行

错误的写法

初始的Sql,当传进来的fusestatus等于字符串0时,这个if并没有执行

    UPDATE ehr_og_org
    <set>
        <if test="fusestatus == '0'">
            FDISUSETIME = SYSDATE,
        </if>
        FUSESTATUS = #{fusestatus},
        FUSESTATUSNAME = #{fusestatusname}
    </set>
    WHERE FCODE = #{fcode}
</update>

正确的写法

将if里的引号修改之后才生效

<update id ="updateOrgStatus">
    UPDATE
        ehr_og_org
    SET
        <if test='fusestatus  == "0"'>
            FDISUSETIME  = SYSDATE,
        </if>
        FUSESTATUS = #{fusestatus},
        FUSESTATUSNAME = #{fusestatusname}
    where FCODE =#{fcode}
</update>

或者写成这样

 <if test="fusestatus == '0'.toString()">
            FDISUSETIME = SYSDATE,
 </if>