code: private XmlElement generateSetsSelective(List<IntrospectedColumn> columns, IntrospectedColumn versionColumn) {
          XmlElement setsChooseEle = new XmlElement("choose");
  
          XmlElement setWhenEle = new XmlElement("when");
          setWhenEle.addAttribute(new Attribute("test", "selective != null and selective.length > 0"));
          setsChooseEle.addElement(setWhenEle);
  
          XmlElement setForeachEle = new XmlElement("foreach");
          setWhenEle.addElement(setForeachEle);
          setForeachEle.addAttribute(new Attribute("collection", "selective"));
          setForeachEle.addAttribute(new Attribute("item", "column"));
          setForeachEle.addAttribute(new Attribute("separator", ","));
  
          Element incrementEle = PluginTools.getHook(IIncrementsPluginHook.class).incrementSetsWithSelectiveEnhancedPluginElementGenerated(versionColumn);
          // 普通情况
          if (incrementEle == null && versionColumn == null) {
              setForeachEle.addElement(new TextElement("${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}"));
          } else if (incrementEle != null) {
              setForeachEle.addElement(incrementEle);
          } else if (versionColumn != null) {
              XmlElement ifEle = new XmlElement("if");
              ifEle.addAttribute(new Attribute("test", "column.value != '" + versionColumn.getActualColumnName() + "'.toString()"));
              ifEle.addElement(new TextElement("${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}"));
  
              setForeachEle.addElement(ifEle);
          }
  
  
          XmlElement setOtherwiseEle = new XmlElement("otherwise");
          setOtherwiseEle.addElement(XmlElementGeneratorTools.generateSetsSelective(columns, "record."));
          setsChooseEle.addElement(setOtherwiseEle);
  
          return setsChooseEle;
      }
docs: sets selective
  @param columns
  @return