以下是一个使用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();
}
```
这个方法与之前的方法类似,不同之处在于我们添加了参数校验的逻辑。在方法中,我们首