以下是一个使用StringBuilder动态拼接SQL语句的方法,可以根据传入的表名、列名和条件列名生成对应的SQL语句,并且会对输入参数进行合法性校验:
```java
public static String generateSql(String tableName, List columns, List conditionColumns) throws IllegalArgumentException {
    // 校验参数是否为空或者包含非法字符
    if (StringUtils.isBlank(tableName) || !tableName.matches("[a-zA-Z0-9_]+")) {
        throw new IllegalArgumentException("Invalid table name: " + tableName);
    }
    if (columns == null || columns.isEmpty()) {
        throw new IllegalArgumentException("Columns cannot be empty");
    }
    for (String column : columns) {
        if (StringUtils.isBlank(column) || !column.matches("[a-zA-Z0-9_]+")) {
            throw new IllegalArgumentException("Invalid column name: " + column);
        }
    }
    if (conditionColumns != null && !conditionColumns.isEmpty()) {
        for (String conditionColumn : conditionColumns) {
            if (StringUtils.isBlank(conditionColumn) || !conditionColumn.matches("[a-zA-Z0-9_]+")) {
                throw new IllegalArgumentException("Invalid condition column name: " + conditionColumn);
            }
        }
    }
    StringBuilder sql = new StringBuilder();
    // 拼接SELECT语句
    sql.append("SELECT ");
    for (int i = 0; i < columns.size(); i++) {
        sql.append(columns.get(i));
        if (i != columns.size() - 1) {
            sql.append(", ");
        }
    }
    // 拼接FROM语句
    sql.append(" FROM ");
    sql.append(tableName);
    // 拼接WHERE语句
    if (conditionColumns != null && !conditionColumns.isEmpty()) {
        sql.append(" WHERE ");
        for (int i = 0; i < conditionColumns.size(); i++) {
            sql.append(conditionColumns.get(i));
            sql.append(" = ?");
            if (i != conditionColumns.size() - 1) {
                sql.append(" AND ");
            }
        }
    }
    return sql.toString();
}
```
这个方法与之前的方法类似,不同之处在于我们添加了参数校验的逻辑。在方法中,我们首