Mybatis-Plus 实现查询条件过滤空值

使用mybatis-plus时,实现mybatis的if标签判断null和空字符串的效果

package org.common.system.query;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

/**
 * 继承QueryWrapper,重写其构造条件方法,使条件为null和空字符串的查询条件不再执行。
 *
 * @author SherlockerSun
 * @since Mybatis+ version: 3.x.x
 */
public class ExcludeEmptyQueryWrapper<T> extends QueryWrapper<T> {

    @Override
    public QueryWrapper<T> eq(String column, Object val) {
        return super.eq(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> ne(String column, Object val) {
        return super.ne(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> gt(String column, Object val) {
        return super.gt(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> ge(String column, Object val) {
        return super.ge(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> lt(String column, Object val) {
        return super.lt(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> le(String column, Object val) {
        return super.le(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> like(String column, Object val) {
        return super.like(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> notLike(String column, Object val) {
        return super.notLike(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> likeLeft(String column, Object val) {
        return super.likeLeft(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> likeRight(String column, Object val) {
        return super.likeRight(isValidValue(val), column, val);
    }

    @Override
    public QueryWrapper<T> between(String column, Object val1, Object val2) {
        if (!isValidValue(val1) && !isValidValue(val2)) {
            return this;
        } else if (!isValidValue(val1)) {
            return super.le(true, column, val2);
        } else if (!isValidValue(val2)) {
            return super.ge(true, column, val1);
        }
        return super.between(true, column, val1, val2);
    }

    @Override
    public QueryWrapper<T> notBetween(String column, Object val1, Object val2) {
        if (!isValidValue(val1) && !isValidValue(val2)) {
            return this;
        } else if (!isValidValue(val1)) {
            return super.le(true, column, val2);
        } else if (!isValidValue(val2)) {
            return super.ge(true, column, val1);
        }
        return super.notBetween(true, column, val1, val2);
    }

    /**
     * 判断值是否有效
     * - 如果值为 null,返回 false
     * - 如果值为空字符串或仅包含空格,返回 false
     * - 否则返回 true
     */
    private boolean isValidValue(Object val) {
        if (val == null) {
            return false;
        }
        if (val instanceof String) {
            String strVal = (String) val;
            return !strVal.trim().isEmpty(); // 去除空格后检查是否为空
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SherlockerSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值