@Override public UpdateParam clone() { UpdateParam param = new UpdateParam(); param.setData(data); param.setExcludes(new LinkedHashSet<>(excludes)); param.setIncludes(new LinkedHashSet<>(includes)); List<Term> terms = this.terms.stream().map(term -> term.clone()).collect(Collectors.toList()); param.setTerms(terms); return param; } }
@Override public Update<T, Q> and(String column, String termType, Object value) { this.param.and(column, termType, value); return this; }
@Override public Update<T> excludes(String... fields) { updateParam.excludes(fields); return this; }
@Override public Update<T> set(String property, Object value) { if (updateParam.getData() == null) updateParam.setData(new HashMap<>()); if (updateParam.getData() instanceof Map) { ((Map) updateParam.getData()).put(property, value); } else { try { BeanUtils.setProperty(updateParam.getData(), property, value); } catch (Exception e) { logger.warn("property error", e); } } return this; }
public SimpleUpdateSqlRenderProcess(RDBTableMetaData metaData, UpdateParam param) { this.metaData = metaData; this.param = param.clone(); List<Term> terms = param.getTerms(); terms = terms.stream().filter(term -> term.getColumn() == null || !term.getColumn().contains(".")).collect(Collectors.toList()); param.setTerms(terms); //解析要操作的字段 this.updateField = parseOperationField(metaData, param); //解析查询条件 buildWhere(metaData, "", param.getTerms(), whereSql, conditionTable); if (!whereSql.isEmpty()) whereSql.removeFirst(); }
@Override public NestConditional<Update<T>> nest(String column, Object value) { return new SimpleNestConditional<>(this, updateParam.nest(column, value)); }
@Override public NestConditional<Update<T, Q>> orNest() { return new SimpleNestConditional(this, this.param.orNest()); }
@Override public Update<T> includes(String... fields) { updateParam.includes(fields); return this; }
@Override public Update<T> set(T data) { updateParam.setData(data); return this; }
public SimpleUpdate(SimpleTable<T> table, SqlExecutor sqlExecutor) { this.table = table; this.sqlExecutor = sqlExecutor; updateParam = new UpdateParam(); }
@Override public Update<T> or(String condition, String termType, Object value) { updateParam.or(condition, termType, value); return this; }
public UpdateFromBean<T, Q> fromBean() { this.bean = param.getData(); return new UpdateFromBean<>(this); }
public Update<T, Q> set(String property, Object value) { if (param.getData() == null) { ((UpdateParam) param).setData(new HashMap<>()); } if (param.getData() instanceof Map) { ((Map) param.getData()).put(property, value); } else { try { propertyUtilsBean.setProperty(param.getData(), property, value); } catch (Exception e) { logger.warn("set property error", e); } } return this; }
@Override public NestConditional<Update<T>> nest() { return new SimpleNestConditional<>(this, updateParam.nest()); }
@Override public NestConditional<Update<T>> orNest() { return new SimpleNestConditional<>(this, updateParam.orNest()); }
public Update<T, Q> includes(String... columns) { param.includes(columns); return this; }
public UpdateFromBean<T, Q> fromBean(T bean) { param.setData(bean); this.bean = bean; return new UpdateFromBean<>(this); }
public static <T> Update<T, UpdateParam<T>> build(Executor<UpdateParam<T>> executor) { return build(executor, new UpdateParam()); } }
@Override public Update<T, Q> or(String column, String termType, Object value) { this.param.or(column, termType, value); return this; }
@Override public int exec() throws SQLException { boolean supportBefore = !triggerSkip && table.getMeta().triggerIsSupport(Trigger.update_before); boolean supportDone = !triggerSkip && table.getMeta().triggerIsSupport(Trigger.update_done); Map<String, Object> context = null; if (supportBefore || supportDone) { context = table.getDatabase().getTriggerContextRoot(); context.put("table", table); context.put("database", table.getDatabase()); context.put("param", updateParam); } if (supportBefore) { table.getMeta().on(Trigger.update_before, context); } SqlRender<UpdateParam> render = table.getMeta().getDatabaseMetaData().getRenderer(SqlRender.TYPE.UPDATE); SQL sql = render.render(table.getMeta(), updateParam); tryValidate(updateParam.getData(), Validator.Operation.UPDATE); int total = sqlExecutor.update(sql); if (supportDone) { context.put("total", total); table.getMeta().on(Trigger.update_done, context); } return total; }