模糊查询一般这么写
<if test="dto.specialSubjectName !=null and dto.specialSubjectName !=''">
AND a.materials_name LIKE CONCAT('%',#{dto.specialSubjectName},'%')
</if>
问题:
当用户输入了% _ 等通配符之后,若后端不进行过滤处理的话,传到数据库就是这个样子的。
AND a.materials_name LIKE '%%%'
这不太好吧。。。。。
解决方法:
换一种写法:instr() 函数
INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
所以 只需要 instr() > 0 即可。
Demo
<if test="dto.specialSubjectName !=null and dto.specialSubjectName !=''">
AND instr(a.materials_name,#{dto.specialSubjectName})>0
</if>
SpringCloud的话也可以在网关写一个全局的过滤器,统一检查前端请求过来的参数,进行过滤。也可以。