MyBatis 模糊查询时对特殊字符"%"和"_"的处理
MyBatis 模糊查询时对特殊字符"%“和”_"的处理
问题:
输入"%“或”_",查询结果为全部数据,且无法查询到带有"%"或者下划线 的数据。
解决:
对特殊字符转义
例如查询字段为 name
若name中含有"%“或 “_” 转为”/%" “/ _”
public void setName(String name) { this.name = StringUtils.isBlank(name) ? null : EscapeUtil.escapeChar(name); }
package com.xxx.util; import org.apache.commons.lang3.StringUtils; /** * @Title:EscapeUtil */ public class EscapeUtil { /** * mysql的模糊查询时特殊字符转义 */ public static String escapeChar(String before){ if(StringUtils.isNotBlank(before)){ before = before.replaceAll("_", "/_"); before = before.replaceAll("%", "/%"); } return before.trim() ; } }
mapper中模糊查询语句
name like CONCAT('%',#{name},'%') ESCAPE '/'