mybatis plus中SelectProvider自定义sql避免where 1=1

因为查询条件的不确定,用到了where 1=1这样的权宜之计,

使用WHERE 1=1 之后,就不能使用索引了

且会遍历全表,显然在数据量比较大的情况下这是不能接受的


注:大部分版本的数据库还是对这个做了优化的,如果没有这个优化,可以参考如下操作

解决方法之一:在返回自定义sql之前检查sql,将不需要的where 1=1替换掉


    public static String replaceForeverTrueSql(String originalSql) {

        /**
         *  先将不规范的空格去除 保证每个条件之间只含一个空格
         */
        originalSql = originalSql.replaceAll(" +", " ");
        /**
         * 判断原始sql中是否包含1=1
         */
        if (originalSql.contains("1=1")) {
            // 包含则将sql 分为两段,以1=1为分隔符
            String[] split = originalSql.split("1=1");
            /**
             *  主要看split[1]后半段,有没有包含And
             */
            String afterHalfSql = split[1].trim();// 去除了前后的空格
            /**
             * 全部转换成大写  避免and 不规范的写法造成误判
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值