code: public SQLBuilder set(final Object entity, final Set<String> excludedPropNames) {
          if (entity instanceof String) {
              return set(N.asArray((String) entity));
          } else if (entity instanceof Map) {
              if (N.isNullOrEmpty(excludedPropNames)) {
                  return set((Map<String, Object>) entity);
              } else {
                  final Map<String, Object> props = new LinkedHashMap<>((Map<String, Object>) entity);
                  Maps.removeKeys(props, excludedPropNames);
                  return set(props);
              }
          } else {
              final Class<?> entityClass = entity.getClass();
              this.entityClass = entityClass;
              final Collection<String> propNames = getUpdatePropNamesByClass(entityClass, excludedPropNames);
              final Set<String> dirtyPropNames = N.isDirtyMarker(entityClass) ? ((DirtyMarker) entity).dirtyPropNames() : null;
              final Map<String, Object> props = N.newHashMap(N.initHashCapacity(N.isNullOrEmpty(dirtyPropNames) ? propNames.size() : dirtyPropNames.size()));
  
              for (String propName : propNames) {
                  if (N.isNullOrEmpty(dirtyPropNames) || dirtyPropNames.contains(propName)) {
                      props.put(propName, ClassUtil.getPropValue(entity, propName));
                  }
              }
  
              return set(props);
          }
      }
docs: Only the dirty properties will be set into the result SQL if the specified entity is a dirty marker entity.
  
  @param entity
  @param excludedPropNames
  @return