【mybatis/java】关于mybatis中test的神奇问题
Contents
关于mybatis中test的神奇问题
缘起
项目中出现一个bug,某sql搜出了不该搜的出的数据。
一直把type=‘AAA’的数据检索出来。实际上上层代码一直传的type是BBB。
经过
其实经过调查,问题居然发送在mybatis中when test的用法。
SELECT * FROM A_TABLE
WHERE TYPE =#{type}
AND PER =#{per}
AND POINT >= #{rate}
<choose>
<when test="type='AAA'">
AND IFNULL(SET_NAME,'')=''
</when>
<when test="type='BBB'">
<if test="setName !=null and setName !=''" >
AND SET_NAME =#{setName}
</if>
</when>
</choose>
ORDER BY ID limit 1
这里test后面用了=符号,是错误的,会造成where条件第一个字段的数据被覆盖成AAA,
这样会造成很诡异的bug,正确的写法这里应该用==,而不是一个=。
通常看了很多例子都是在test后面用!=,还是能不用=号的为妙!
结语
其实就是一个mybatis的使用问题,虽然很基础但是结合具体数据会很诡异。