docs: private void update(BatchExecutor batchExecutor, MappingConfig config, SingleDml dml) throws SQLException {
          Map<String, Object> data = dml.getData();
          if (data == null || data.isEmpty()) {
              return;
          }
  
          Map<String, Object> old = dml.getOld();
          if (old == null || old.isEmpty()) {
              return;
          }
  
          DbMapping dbMapping = config.getDbMapping();
  
          Map<String, String> columnsMap = SyncUtil.getColumnsMap(dbMapping, data);
  
          Map<String, Integer> ctype = getTargetColumnType(batchExecutor.getConn(), config);
  
          StringBuilder updateSql = new StringBuilder();
          updateSql.append("UPDATE ").append(SyncUtil.getDbTableName(dbMapping)).append(" SET ");
          List<Map<String, ?>> values = new ArrayList<>();
          boolean hasMatched = false;
          for (String srcColumnName : old.keySet()) {
              List<String> targetColumnNames = new ArrayList<>();
              columnsMap.forEach((targetColumn, srcColumn) -> {
                  if (srcColumnName.equalsIgnoreCase(srcColumn)) {
                      targetColumnNames.add(targetColumn);
                  }
              });
              if (!targetColumnNames.isEmpty()) {
                  hasMatched = true;
                  for (String targetColumnName : targetColumnNames) {
                      updateSql.append(targetColumnName).append("=?, ");
                      Integer type = ctype.get(Util.cleanColumn(targetColumnName).toLowerCase());
                      if (type == null) {
                          throw new RuntimeException("Target column: " + targetColumnName + " not matched");
                      }
                      BatchExecutor.setValue(values, type, data.get(srcColumnName));
                  }
              }
          }
          if (!hasMatched) {
              logger.warn("Did not matched any columns to update ");
              return;
          }
          int len = updateSql.length();
          updateSql.delete(len - 2, len).append(" WHERE ");
  
          // 拼接主键
          appendCondition(dbMapping, updateSql, ctype, values, data, old);
          batchExecutor.execute(updateSql.toString(), values);
          if (logger.isTraceEnabled()) {
              logger.trace("Update target table, sql: {}", updateSql);
          }
      }