使用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;
}
}