private List<Element> generateSelectiveEnhancedEles(IntrospectedTable introspectedTable) {
        List<Element> eles = new ArrayList<>();

        eles.add(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime() + " ("));

        XmlElement foreachInsertColumns = new XmlElement("foreach");
        foreachInsertColumns.addAttribute(new Attribute("collection", "selective"));
        foreachInsertColumns.addAttribute(new Attribute("item", "column"));
        foreachInsertColumns.addAttribute(new Attribute("separator", ","));
        foreachInsertColumns.addElement(new TextElement("${column.escapedColumnName}"));

        eles.add(foreachInsertColumns);

        eles.add(new TextElement(")"));

        // values
        eles.add(new TextElement("values"));

        // foreach values
        XmlElement foreachValues = new XmlElement("foreach");
        foreachValues.addAttribute(new Attribute("collection", "list"));
        foreachValues.addAttribute(new Attribute("item", "item"));
        foreachValues.addAttribute(new Attribute("separator", ","));

        foreachValues.addElement(new TextElement("("));

        // foreach 所有插入的列，比较是否存在
        XmlElement foreachInsertColumnsCheck = new XmlElement("foreach");
        foreachInsertColumnsCheck.addAttribute(new Attribute("collection", "selective"));
        foreachInsertColumnsCheck.addAttribute(new Attribute("item", "column"));
        foreachInsertColumnsCheck.addAttribute(new Attribute("separator", ","));

        // 所有表字段
        List<IntrospectedColumn> columns = ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
        List<IntrospectedColumn> columns1 = ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
        for (int i = 0; i < columns1.size(); i++) {
            IntrospectedColumn introspectedColumn = columns.get(i);
            XmlElement check = new XmlElement("if");
            check.addAttribute(new Attribute("test", "'" + introspectedColumn.getActualColumnName() + "'.toString() == column.value"));
            check.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "item.")));

            foreachInsertColumnsCheck.addElement(check);
        }
        foreachValues.addElement(foreachInsertColumnsCheck);

        foreachValues.addElement(new TextElement(")"));

        eles.add(foreachValues);

        return eles;
    }
private List<Element> generateSelectiveEnhancedEles(IntrospectedTable introspectedTable) {
        List<Element> eles = new ArrayList<>();

        eles.add(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime() + " ("));

        XmlElement foreachInsertColumns = new XmlElement("foreach");
        foreachInsertColumns.addAttribute(new Attribute("collection", "selective"));
        foreachInsertColumns.addAttribute(new Attribute("item", "column"));
        foreachInsertColumns.addAttribute(new Attribute("separator", ","));
        foreachInsertColumns.addElement(new TextElement("${column.escapedColumnName}"));

        eles.add(foreachInsertColumns);

        eles.add(new TextElement(")"));

        
        eles.add(new TextElement("values"));

        
        XmlElement foreachValues = new XmlElement("foreach");
        foreachValues.addAttribute(new Attribute("collection", "list"));
        foreachValues.addAttribute(new Attribute("item", "item"));
        foreachValues.addAttribute(new Attribute("separator", ","));

        foreachValues.addElement(new TextElement("("));

        
        XmlElement foreachInsertColumnsCheck = new XmlElement("foreach");
        foreachInsertColumnsCheck.addAttribute(new Attribute("collection", "selective"));
        foreachInsertColumnsCheck.addAttribute(new Attribute("item", "column"));
        foreachInsertColumnsCheck.addAttribute(new Attribute("separator", ","));

        
        List<IntrospectedColumn> columns = ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
        List<IntrospectedColumn> columns1 = ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
        for (int i = 0; i < columns1.size(); i++) {
            IntrospectedColumn introspectedColumn = columns.get(i);
            XmlElement check = new XmlElement("if");
            check.addAttribute(new Attribute("test", "'" + introspectedColumn.getActualColumnName() + "'.toString() == column.value"));
            check.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "item.")));

            foreachInsertColumnsCheck.addElement(check);
        }
        foreachValues.addElement(foreachInsertColumnsCheck);

        foreachValues.addElement(new TextElement(")"));

        eles.add(foreachValues);

        return eles;
    }
private List < Element > generateSelectiveEnhancedEles ( IntrospectedTable introspectedTable ) { List < Element > eles = new ArrayList <> ( ) ; eles . add ( new TextElement ( "insert into " + introspectedTable . getFullyQualifiedTableNameAtRuntime ( ) + " (" ) ) ; XmlElement foreachInsertColumns = new XmlElement ( "foreach" ) ; foreachInsertColumns . addAttribute ( new Attribute ( "collection" , "selective" ) ) ; foreachInsertColumns . addAttribute ( new Attribute ( "item" , "column" ) ) ; foreachInsertColumns . addAttribute ( new Attribute ( "separator" , "," ) ) ; foreachInsertColumns . addElement ( new TextElement ( "${column.escapedColumnName}" ) ) ; eles . add ( foreachInsertColumns ) ; eles . add ( new TextElement ( ")" ) ) ; // values eles . add ( new TextElement ( "values" ) ) ; // foreach values XmlElement foreachValues = new XmlElement ( "foreach" ) ; foreachValues . addAttribute ( new Attribute ( "collection" , "list" ) ) ; foreachValues . addAttribute ( new Attribute ( "item" , "item" ) ) ; foreachValues . addAttribute ( new Attribute ( "separator" , "," ) ) ; foreachValues . addElement ( new TextElement ( "(" ) ) ; // foreach 所有插入的列，比较是否存在 XmlElement foreachInsertColumnsCheck = new XmlElement ( "foreach" ) ; foreachInsertColumnsCheck . addAttribute ( new Attribute ( "collection" , "selective" ) ) ; foreachInsertColumnsCheck . addAttribute ( new Attribute ( "item" , "column" ) ) ; foreachInsertColumnsCheck . addAttribute ( new Attribute ( "separator" , "," ) ) ; // 所有表字段 List < IntrospectedColumn > columns = ListUtilities . removeIdentityAndGeneratedAlwaysColumns ( introspectedTable . getAllColumns ( ) ) ; List < IntrospectedColumn > columns1 = ListUtilities . removeIdentityAndGeneratedAlwaysColumns ( introspectedTable . getAllColumns ( ) ) ; for ( int i = 0 ; i < columns1 . size ( ) ; i ++ ) { IntrospectedColumn introspectedColumn = columns . get ( i ) ; XmlElement check = new XmlElement ( "if" ) ; check . addAttribute ( new Attribute ( "test" , "'" + introspectedColumn . getActualColumnName ( ) + "'.toString() == column.value" ) ) ; check . addElement ( new TextElement ( MyBatis3FormattingUtilities . getParameterClause ( introspectedColumn , "item." ) ) ) ; foreachInsertColumnsCheck . addElement ( check ) ; } foreachValues . addElement ( foreachInsertColumnsCheck ) ; foreachValues . addElement ( new TextElement ( ")" ) ) ; eles . add ( foreachValues ) ; return eles ; }
生成insert selective 增强的插入语句
@param introspectedTable
@return
生成insert selective 增强的插入语句