问题代码示例
<if test="col == '=' '"> // 注意: 此处test= “” 为双引号
fileName = #{xxxxx}
</if>
解决方案
双引号包单引号 换为单引号包双引号
<if test='col == "" '> // 注意: 此处test= “” 为双引号
fileName = #{xxxxx}
</if>
源码分析
正常代码分析
单引号包双引号时 v2 的值被识别为 = 字符串满足该条件 执行判断后返回结果
异常代码分析
传参LIKE 为字符串即 col 为 为字符串类型 而 = 为 character 类型
注: 做下角 v2 变量值为 = 但是不为 字符串的 = 而此时的LIKE 仍然为字符串类型 所以不满足 type为10 的任意判单 代码将执行 default 代码 将v1 和v2转换为long类型
接上图 v1为 字符串LIKE 不能强制转为 long类型 所以代码报 类型转换错误