java使用mybatis模糊查询的时候,避免使用%和_查出全部数据
模糊查询的时候,通常我们会把筛选的条件,如filter为筛选的条件,两边加上两个%放入sql查询,如下所示:
String filterStr = StringUtils.isBlank(filter) ? null : "%" + filter + "%"
这样的话如果用户输入一个%,sql的样子如下,会查出所有数据:
select * from user where name like "%%%"
这时候需要对%和_进行转义,代码如下:
public String queryReplace(String filter){
return StringUtils.isBlank(filter) ? null : "%" + filter.replace("\\", "\\\\")
.replace("%","\\"+"%")
.replace("_","\\"+"_")
.replace("'","\\"+"'")
.replace("\"","\\"+"\"") + "%";
}