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;
    }
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;
    }
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 ; }
sets selective
@param columns
@return
sets selective