原创

动态 SQL 查询生成器 - Java 8

温馨提示:
本文最后更新于 2024年04月12日,已超过 37 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

Created SQL Query Builders but I'm not satisfied with the end result:

Query for select:

public static String constructSelectSqlQuery(String table, String[] columns, String conditionColumn) {
        if (isNullOrEmpty(table)) {
            LOGGER.warn("Table name is empty.");
            return "";
        }
        if (columns == null || columns.length == 0) {
            LOGGER.warn("Columns array is empty.");
            return "";
        }
        if (isNullOrEmpty(conditionColumn)) {
            LOGGER.warn("Condition Column is empty");
            return "";
        }
        String columnList = String.join(", ", columns);
        return String.format("SELECT %s FROM %s WHERE %s = ?;", columnList, table, conditionColumn);
    }

Query for update:

public static String constructUpdateSqlQuery(String table, String[] columns, String[] values, String pk, int id) {
        if (isNullOrEmpty(table) || isInvalidParameters(columns, values)) {
            LOGGER.warn("Invalid parameters");
            return "";
        }

        StringBuilder setClause = new StringBuilder();
        for (int i = 0; i < columns.length; i++) {
            if ("data_fase".equals(columns[i]) && "current".equalsIgnoreCase(values[i])) {
                setClause.append(columns[i]).append(" = current");
            } else {
                setClause.append(columns[i]).append(" = ?");
            }
            if (i < columns.length - 1) {
                setClause.append(", ");
            }
        }
        return String.format("UPDATE %s SET %s WHERE %s = %d;", table, setClause.toString(), pk, id);
    }

Query for insert:

public static String constructInsertSqlQuery(String table, String[] columns, String[] values) {
        if (isNullOrEmpty(table) || isInvalidParameters(columns, values)) {
            LOGGER.warn("Invalid parameters");
            return "";
        }

        StringBuilder columnList = new StringBuilder();
        StringBuilder valueList = new StringBuilder();
        for (int i = 0; i < columns.length; i++) {
            columnList.append(columns[i]);
            if ("current".equalsIgnoreCase(values[i])) {
                valueList.append("current");
            } else {
                valueList.append("?");
            }

            if (i < columns.length - 1) {
                columnList.append(", ");
                valueList.append(", ");
            }
        }
        return String.format("INSERT INTO %s (%s) VALUES (%s);", table, columnList.toString(), valueList.toString());
    }

Instead of these 3 separate queries is there any way to create one Dynamic SQL Query Builder?

What other optimizations can be applied?

正文到此结束
热门推荐
本文目录