模糊查询的时候使用%表示模糊位置;正常sql没什么问题
但是一设计到字符串拼接就出问题了
<if test='country!=null'> AND '#{country}%')</if>
这里会提示传入了一个参数但是只找到0个占位符,因为‘ ’单引号直接把里面转换成了字符导致无法找到对应的占位符
后来改成了:
<if test='country!=null'> AND #{country}'%')</if>
这样虽然不报错,但是无论如何都搜不出数据来;
也可以使用:
<if test='country!=null'> AND '${country}%')</if>
勉强能用,但是会引发sql注入问题;
最终方案:
concat(str,str,str,......)
<if test='country!=null'> AND concat(#{country},'%')</if>
这样可以把多个字符拼接在一起,所以可以使用#{}占位而不引发sql注入问题;
问题就解决了;这样的方法也可以使用${}需要注意的是单引号要把占位部分也包裹起来;
不推荐:
<if test='country!=null'> AND concat('${country}','%')</if>