WEB开发 查询条件 含有特殊字符‘/’ ‘_’ ‘%‘查询失败,又不做限制时的处理方法

首先在 sql中的修改

这里使用mybatis做演示,如果环境不同参考思路即可

在拼入查询条件的末尾加上 escape ‘/’ 这里的escape 是让后面的字符不做转义处理 不一定非要使用‘/’ 其他也可以

例子:

<if test="record != null and record != ''">
AND record like CONCAT(CONCAT('%',#{record,javaType=String,jdbcType=CHAR}), '%')
 escape '/'
if>

代码中

需要判断是否含有特殊字符,如果有,则需要在特殊字符前加上上方定义的 不做转转义的 内容

我这里的查询内容是使用Map形式,使用key value的形式传入和获取,这里我将代码抽为一个公用的工具类方法如下书写:

/**
	 * 查询条件 模糊查询 过滤指定的字符
	 * @param map
	 * @param key
	 * @return
	 */
	public static Map<String, Object> specialChartsFilter(Map<String, Object> map,String key){
		if (map.get(key)!=null) {
			String record = (String) map.get(key);
			if (record!= null & !record.equals("")) {
				if (record.contains("%")||record.contains("_")||record.contains("/")) {
					String replaceAll = record.replaceAll("/", "//").replaceAll("%", "/%").replaceAll("_", "/_");
					map.put(key, replaceAll);
				}
			}
		}
		
		return map;
	}

因为 / 本身带有转义的意思,所以先对 / 做处理

你可能感兴趣的:(JavaWeb开发,数据库,java,sql,mybatis)