code: public String updateSetColumnsByDiffer(Class<?> entityClass) {
          StringBuilder sql = new StringBuilder();
          sql.append("<set>");
          //获取全部列
          Set<EntityColumn> columnSet = EntityHelper.getColumns(entityClass);
          //对乐观锁的支持
          EntityColumn versionColumn = null;
          //当某个列有主键策略时，不需要考虑他的属性是否为空，因为如果为空，一定会根据主键策略给他生成一个值
          for (EntityColumn column : columnSet) {
              if (column.getEntityField().isAnnotationPresent(Version.class)) {
                  if (versionColumn != null) {
                      throw new VersionException(entityClass.getCanonicalName() + " 中包含多个带有 @Version 注解的字段，一个类中只能存在一个带有 @Version 注解的字段!");
                  }
                  versionColumn = column;
              }
              if (!column.isId() && column.isUpdatable()) {
                  if (column == versionColumn) {
                      Version version = versionColumn.getEntityField().getAnnotation(Version.class);
                      String versionClass = version.nextVersion().getCanonicalName();
                      //version = ${@tk.mybatis.mapper.version@nextVersionClass("versionClass", version)}
                      sql.append(column.getColumn())
                          .append(" = ${@tk.mybatis.mapper.version.VersionUtil@nextVersion(")
                          .append("@").append(versionClass).append("@class, ")
                          .append(column.getProperty()).append(")},");
                  } else {
                      //if old.xx != newer.xx
                      sql.append(getIfNotEqual(column, column.getColumnEqualsHolder(NEWER) + ","));
                  }
              }
          }
          sql.append("</set>");
          return sql.toString();
      }
docs: update set列
  
  @param entityClass
  @return