今天同事发现根据名称模糊查询的时候数据 % 会查询所有的数据,其实是 ‘ % ’ ,‘_’都是关键字符,所以需要对这样的字符进行转义,方式如下:
1.已经写好了工具类,直接用就好了
/** 将参数中包含的%_通配符 先进行转义 */
public static String ContainWildcard(String args) {
if (!PubUtils.isNull(args)) {
if (args.contains("%")) {
args = args.replaceAll("\\%", "/%");
}
if (args.contains("_")) {
args = args.replaceAll("\\_", "/_");
}
}
return args;
2.在mapper.xml中进行如下改变:
改变之前:
ROLE_NAME LIKE concat(concat('%',#{roleName}),'%')
改变之后:
ROLE_NAME LIKE concat(concat('%',#{roleName}),'%') ESCAPE '/'
3.解释:
如果字符串中包含 % OR _ 替换成 /% OR /_这样mapper.xml中按照特定的匹配字符 '/' 就匹配到了,它就认为 这个字符是需要被转义的,生成的SQL就默认给转义了。