mybatis拦截器应用实例整理
前篇文字整理了拦截器的基本使用,本文整理和收集一些应用场景,方便后续查阅资料时参考和搜索。
1、处理模糊查询时的特殊字符
场景:使用MyBatis中的模糊查询时(数据库是mysql),当查询关键字中包括有_、\、%时,查询关键字失效。
比如,like查询中包含_时,查询结果为全部,like '%_%'和like '%%'查询结果一致,并不能查询出实际字段中包含_字符的结果。
主要解决方法:
将特殊字符做转义处理,比如like '%_%'查询转换为like ‘%\_%’。
特殊字符 | 未处理 | 处理后 |
---|---|---|
_ | like '%_%' | like '%\_%' |
% | like '%%%' | like '%\%%' |
\ | like '%\%' | `like ‘%\%’ |
核心处理逻辑:
//特殊字符转义
private static String escapeChar(String before) {
if (StringUtils.isNotBlank(before)) {
before = before.replace("\\", "\\\\");
before = before.replace("_", "\\_");
before = before.replace("%", "\\%");
}
return before;
}
需要注意的点:
- 与其他拦截器的执行顺序,比如项目中如果使用了mybatis-plus、pagehelper及tk-mybatis等;特别是PageHelper其实经过了count和查询最终结果两步,这也是需要考虑的点。
- 拦截器指定拦截方法的选择,需根据业务选择Executor、ParameterHandler、ResultSetHandler和StatementHandler接口中的一种。
- 查询中使用了特殊的标签,比如<bind>,这类场景根据业务做对应处理。
- 修改映射实体的参数值时,有时可以直接修改值,有时需要使用反射修改属性值。
参考资料:
MyBatis Plus之like模糊查询中包含有特殊字符
2、实现增删改查参数的加/解密
这个主要是针对项目中出现的一些客户敏感信息的处理,比如账号、手机号、身份证号、银行卡号这些需要加密落库,同时查询时需要解密读取或是按加密后返回。