前言:在模糊查询时,如果要查询的内容中有%,比例:小明%
如果不做处理,那么就会查询到所以的小明相关的数据,不能只查询到小明%的数据。
1.创建工具类
/**
* 工具类
*/
public class StringUtils {
private static final String FUZZY_MATCH_DEFAULT_CHAR="/";
public static boolean isBlank(final CharSequence cs){
return org.apache.commons.lang3.StringUtils.isBlank(cs);
}
/**
* 模糊匹配字符串转换规则,使用默认的escape 字符 '/'
* @param source 源字符串
* */
public static String fuzzyMatchingStringReplace(String source){
if (isBlank(source)){
return source;
}
return source
.replace(FUZZY_MATCH_DEFAULT_CHAR, FUZZY_MATCH_DEFAULT_CHAR + FUZZY_MATCH_DEFAULT_CHAR)
.replace("%", FUZZY_MATCH_DEFAULT_CHAR + "%")
.replace("/", FUZZY_MATCH_DEFAULT_CHAR + "/")
.replace("_", FUZZY_MATCH_DEFAULT_CHAR + "_");
}
/**
* 模糊匹配字符串转换规则
* @param source 源字符串
* @param escapeChar SQL中 escape 后面紧跟的字符
* */
public static String fuzzyMatchingStringReplace(String source, CharSequence escapeChar){
if (isBlank(source)){
return source;
}
return source
.replace(escapeChar.toString(), escapeChar.toString() + escapeChar)
.replace("%", escapeChar + "%")
.replace("/", escapeChar + "/")
.replace("_", escapeChar + "_");
}
}
2.工具类使用
daoService调用方法
@Override
public List<Bceshi> selectAllBceshi(String fuzzyWord) {
fuzzyWord= StringUtils.fuzzyMatchingStringReplace(fuzzyWord);
return bceshiMapper.selectAllBceshi(fuzzyWord);
}
Mapper.xml中使用escape
<select id="selectAllBceshi" resultType="com.atguigu.paymentdemo.entity.Bceshi">
select * from b_ceshi
<where>
<if test="fuzzyWord !=null">
concat_ws('',bname,btype) like concat('%',#{fuzzyWord},'%') escape '/'
</if>
</where>
</select>
到这里就结束了