栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatisplus对select中模糊查询%转义插件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatisplus对select中模糊查询%转义插件

1. 自定义插件 CharEscapeInnerInterceptor,继承InnerInterceptor
public class CharEscapeInnerInterceptor implements InnerInterceptor {

    @SneakyThrows
    @Override
    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
        if (parameter instanceof MapperMethod.ParamMap){
            MapperMethod.ParamMap map= (MapperMethod.ParamMap)parameter;
            map.keySet().forEach(key->{
                if (map.get(key)!=null){
                    map.put(key,charEscape(map.get(key).toString()));
                }
            });
        }else if (parameter instanceof String){
            // 反射修改参数值
            Field f=parameter.getClass().getDeclaredField("value");
            f.setAccessible(true);
            f.set(parameter,charEscape(parameter.toString()).toCharArray());
        }
        System.out.println(parameter);
    }

    private String charEscape(String charString) {
        if (!StringUtils.hasLength(charString)) {
            return charString;
        }
        charString = charString.trim();
        if (charString.contains("\")) {
            charString = charString.replaceAll("\\", "\\");
        }
        if (charString.contains("%")) {
            charString = charString.replaceAll("%", "\\%");
        }
        if (charString.contains("_")) {
            charString = charString.replaceAll("_", "\\_");
        }
        return charString;
    }
}

2. 修改mybatis配置 ,添加拦截器
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        interceptor.addInnerInterceptor(new CharEscapeInnerInterceptor());
        return interceptor;
    }
}

3. 测试



结果:传入参数为%,查询时sql参数为/%,参数已转义

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号