mybatis添加查询条件还有改xml?


/**
 * <p>
 * 扩充sql
 * 无需考虑sql注入风险
 * </p>
 *
 * @author duguotao
 * @version 1.0.0
 * @since Created in 2021/11/30
 */
public class Sql {

    private StringBuilder where = new StringBuilder();
    private String groupBy;
    private String having;
    private String orderBy;

    public StringBuilder getWhere() {
        return where;
    }

    public void setWhere(StringBuilder where) {
        this.where = where;
    }

    public String getGroupBy() {
        return groupBy;
    }

    public void setGroupBy(String groupBy) {
        this.groupBy = groupBy;
    }

    public String getHaving() {
        return having;
    }

    public void setHaving(String having) {
        this.having = having;
    }

    public String getOrderBy() {
        return orderBy;
    }

    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }

    public Sql addOrderBy(String sort, String order) {
        if (!isEmpty(sort) && !isEmpty(order)) {
            this.orderBy = ObjectHelper.underscoreName(sort) + " " + order;
        }
        return this;
    }

    public Sql orLike(String value, String columns) {
        if (!isEmpty(value)) {
            StringBuilder strBuf = new StringBuilder("");
            for (String column : columns.split(",")) {
                strBuf.append(ObjectHelper.underscoreName(column)).append(" like '%").append(value).append("%' or ");
            }
            String orLikeStr = strBuf.substring(0, strBuf.lastIndexOf("or"));
            where.append(" and (").append(orLikeStr).append(")");
        }
        return this;
    }

    public Sql eq(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" = '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql ne(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" != '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql like(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" like '%").append(sqlParam(value)).append("%'");
        }
        return this;
    }

    public Sql notLike(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" not like '%").append(sqlParam(value)).append("%'");
        }
        return this;
    }

    public Sql in(String column, String... values) {
        if (!isEmpty(values)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" in (").append(inValuesString(values)).append(")");
        }
        return this;
    }

    public Sql notIn(String column, String... values) {
        if (!isEmpty(values)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" not in (").append(inValuesString(values)).append(")");
        }
        return this;
    }

    public Sql gt(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" > '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql gte(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" >= '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql lt(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" < '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql lte(String column, String value) {
        if (!isEmpty(value)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" <= '").append(sqlParam(value)).append("'");
        }
        return this;
    }

    public Sql between(String column, String from, String to) {
        if (isEmpty(from) && isEmpty(to)) {
            return this;
        }
        if (isEmpty(to)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" >= '").append(sqlParam(from)).append("'");
        } else if (isEmpty(from)) {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" <= '").append(sqlParam(to)).append("'");
        } else {
            where.append(" and ").append(ObjectHelper.underscoreName(column)).append(" between '").append(sqlParam(from)).append("' and '").append(sqlParam(to)).append("'");
        }
        return this;
    }

    public String build() {
        StringBuilder sql = new StringBuilder("");
        final int a = 4;
        final int b = 5;
        if (where.length() > a) {
            sql.append(" ").append(where.substring(b));
        }
        if (!isEmpty(groupBy)) {
            sql.append(" group by ").append(groupBy);
        }
        if (!isEmpty(having)) {
            sql.append(" having ").append(having);
        }
        if (!isEmpty(orderBy)) {
            sql.append(" order by ").append(orderBy);
        }
        return sql.toString();
    }

    private static boolean isEmpty(String value) {
        return value == null || "".equals(value) || value.trim().length() == 0;
    }

    private static boolean isEmpty(String[] values) {
        if (values == null || values.length == 0) {
            return true;
        }
        for (String value : values) {
            if (!isEmpty(value)) {
                return false;
            }
        }
        return true;
    }

    private static String inValuesString(String[] values) {
        StringBuilder string = new StringBuilder();
        for (String value : values) {
            if (isEmpty(value)) {
                continue;
            }
            string.append('\'');
            string.append(value);
            string.append('\'');
            string.append(',');
        }
        if (string.length() > 0) {
            string.deleteCharAt(string.length() - 1);
        }
        return string.toString();
    }

    private static String sqlParam(String sqlParam) {
        return sqlParam.replaceAll("([';]+|(--)+)", "");
    }
}
public class ObjectHelper {
 
    /**
     * 将id数组转换为id集合
     */
    public static List<Long> initIds(String[] ids) {
        List<Long> list = new ArrayList<Long>();
        list.add(-1L);
        for (String id : ids) {
            list.add(Long.valueOf(id));
        }
        return list;
    }
 
    /**
     * 组装条件
     */
    public static List<String> strToList(String str) {
        if (isEmpty(str)) {
            return null;
        }
        String[] strs = str.split(",");
        return new ArrayList<>(Arrays.asList(strs));
    }
 
    /**
     * 判断这个Object是否为Null或长度为0
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }
        if (obj instanceof Collection) {
            return ((Collection<?>) obj).isEmpty();
        }
 
        if (obj instanceof String) {
            return ((String) obj).equalsIgnoreCase("null")
                    | ((String) obj).trim().equals("");
        }
 
        if (obj instanceof StringBuffer) {
            return ((StringBuffer) obj).length() == 0;
        }
        if (obj.getClass().isArray()) {
            try {
                Object[] a = (Object[]) obj;
                boolean b = true;
                for (Object o : a) {
                    b = isEmpty(o);
                    if (!b) {
                        break;
                    }
                }
                return b;
            } catch (ClassCastException ignored) {
            }
        }
        return false;
    }
 
    /**
     * 判断这个Object是否不为Null或长度不为0
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }
 
    /**
     * 返回首字母大写单词
     */
    public static String lcyFirstLetterToUpper(String str) {
        return str.replaceFirst(str.substring(0, 1), str.substring(0, 1)
                .toUpperCase());
    }
 
    /**
     * 转换为下划线
     */
    public static String underscoreName(String camelCaseName) {
        StringBuilder result = new StringBuilder();
        if (camelCaseName != null && camelCaseName.length() > 0) {
            result.append(camelCaseName.substring(0, 1).toLowerCase());
            for (int i = 1; i < camelCaseName.length(); i++) {
                char ch = camelCaseName.charAt(i);
                if (Character.isUpperCase(ch)) {
                    result.append("_");
                    result.append(Character.toLowerCase(ch));
                } else {
                    result.append(ch);
                }
            }
        }
        return result.toString();
    }
 
    /**
     * 转换为驼峰
     */
    public static String camelCaseName(String underscoreName) {
        StringBuilder result = new StringBuilder();
        if (underscoreName != null && underscoreName.length() > 0) {
            boolean flag = false;
            for (int i = 0; i < underscoreName.length(); i++) {
                char ch = underscoreName.charAt(i);
                if ("_".charAt(0) == ch) {
                    flag = true;
                } else {
                    if (flag) {
                        result.append(Character.toUpperCase(ch));
                        flag = false;
                    } else {
                        result.append(ch);
                    }
                }
            }
        }
        return result.toString();
    }
}

再也不用修改XML了 

 使用

 

猜你喜欢

转载自blog.csdn.net/weixin_44912855/article/details/121950642