package com.walker.jdbc.sqlgen; import com.walker.jdbc.SqlAndParameters; import org.apache.commons.lang3.ArrayUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * update 语句生成工具 * * @author 时克英 * @date 2017-3-32 */ public class UpdateBuilder extends AbstractSqlBuilder { private final String table; private final List setColumns = new ArrayList<>(); private final List setValues = new ArrayList<>(); private final List whereColumns = new ArrayList<>(); private final List whereValues = new ArrayList<>(); /** * 根据表名构造更新语句生成工具 * * @param table 表名 */ public UpdateBuilder(String table) { this.table = table; } /** * 设置update语句更新的字段值 * * @param column 字段名 * @param value 字段值 * @return UpdateBuilder对象 */ public UpdateBuilder set(String column, Object value) { return this.set(column, value, true); } /** * 设置update语句更新的字段值 * * @param column 字段名 * @param value 字段值 * @param enable 是否更新 * @return UpdateBuilder对象 */ public UpdateBuilder set(String column, Object value, boolean enable) { if (enable) { this.setColumns.add(column); this.setValues.add(value); } return this; } /** * 设置更新时的where条件字段 * * @param column 条件字段名 * @param value 字段值 * @return UpdateBuilder对象 */ public UpdateBuilder where(String column, Object value) { this.whereColumns.add(column); this.whereValues.add(value); return this; } /** * @see AbstractSqlBuilder#genMapSql() */ @Override public SqlAndParameters> genMapSql() { Map parametersMap = new HashMap<>(); StringBuilder sb = new StringBuilder("update ").append(this.table); sb.append(" set "); for (int i = 0; i < this.setColumns.size(); i++) { if (i > 0) { sb.append(", "); } sb.append(this.setColumns.get(i)).append("=:").append(this.setColumns.get(i) + "_"); parametersMap.put(this.setColumns.get(i) + "_", getNotEmptyValue(this.setValues.get(i))); } sb.append(" where "); for (int i = 0; i < this.whereColumns.size(); i++) { if (i > 0) { sb.append(" and "); } if (isSqlNull(whereValues.get(i))) { sb.append(this.whereColumns.get(i)).append(" is null"); } else { sb.append(this.whereColumns.get(i)).append("=:").append(this.whereColumns.get(i)); parametersMap.put(this.whereColumns.get(i), this.whereValues.get(i)); } } return new SqlAndParameters<>(sb.toString(), parametersMap); } /** * @see AbstractSqlBuilder#genMapSql(String, Map< String, Object> ) */ @Override public SqlAndParameters> genMapSql(String where, Map parametersMap) { Map temp = new HashMap<>(); StringBuilder sb = new StringBuilder("update ").append(this.table); sb.append(" set "); for (int i = 0; i < this.setColumns.size(); i++) { if (i > 0) { sb.append(", "); } sb.append(this.setColumns.get(i)).append("=:").append(this.setColumns.get(i) + "_"); temp.put(this.setColumns.get(i) + "_", getNotEmptyValue(this.setValues.get(i))); } sb.append(" ").append(where); temp.putAll(parametersMap); return new SqlAndParameters<>(sb.toString(), temp); } /** * @see AbstractSqlBuilder#genArraySql(String, Object[]) */ @Override public SqlAndParameters genArraySql(String where, Object[] parametersArray) { Object[] temp = new Object[]{}; StringBuilder sb = new StringBuilder("update ").append(this.table); sb.append(" set "); for (int i = 0; i < this.setColumns.size(); i++) { if (i > 0) { sb.append(", "); } sb.append(this.setColumns.get(i)).append("=?"); temp = ArrayUtils.add(temp, getNotEmptyValue(this.setValues.get(i))); } sb.append(" ").append(where); temp = ArrayUtils.addAll(temp, parametersArray); return new SqlAndParameters<>(sb.toString(), temp); } /** * @see AbstractSqlBuilder#genArraySql() */ @Override public SqlAndParameters genArraySql() { Object[] parametersArray = new Object[]{}; StringBuilder sb = new StringBuilder("update ").append(this.table); sb.append(" set "); for (int i = 0; i < this.setColumns.size(); i++) { if (i > 0) { sb.append(", "); } sb.append(this.setColumns.get(i)).append("=?"); parametersArray = ArrayUtils.add(parametersArray, getNotEmptyValue(this.setValues.get(i))); } sb.append(" where "); for (int i = 0; i < this.whereColumns.size(); i++) { if (i > 0) { sb.append(" and "); } if (isSqlNull(whereValues.get(i))) { sb.append(this.whereColumns.get(i)).append(" is null"); } else { sb.append(this.whereColumns.get(i)).append("=?"); parametersArray = ArrayUtils.add(parametersArray, this.whereValues.get(i)); } } return new SqlAndParameters<>(sb.toString(), parametersArray); } }