src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type, boolean upsert) {
        List<Element> list = new ArrayList<>();

        // 只有upsert插件才会传入 IdentityAndGeneratedAlwaysColumn
        if (upsert && hasIdentityAndGeneratedAlwaysColumns(columns)) {
            XmlElement trimEle = generateTrim(bracket);

            for (IntrospectedColumn introspectedColumn : columns) {
                if (introspectedColumn.isGeneratedAlways() || introspectedColumn.isIdentity()) {
                    generateSelectiveToTrimEleTo(trimEle, introspectedColumn, prefix, type);
                } else {
                    generateSelectiveCommColumnTo(trimEle, introspectedColumn, prefix, type);
                }
            }

            return Arrays.asList(trimEle);
        } else {
            StringBuilder sb = new StringBuilder(bracket ? "(" : "");
            Iterator<IntrospectedColumn> columnIterator = columns.iterator();
            while (columnIterator.hasNext()) {
                IntrospectedColumn introspectedColumn = columnIterator.next();

                switch (type) {
                    case 3:
                        List<Element> incrementEles = PluginTools.getHook(IIncrementsPluginHook.class).incrementSetElementGenerated(introspectedColumn, prefix, false);
                        if (!incrementEles.isEmpty()) {
                            // 增量插件支持
                            if (sb.length() > 0) {
                                list.add(new TextElement(sb.toString()));
                                sb.setLength(0);
                            }
                            list.addAll(incrementEles);
                        } else {
                            sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
                            sb.append(" = ");
                            sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix));
                        }

                        break;
                    case 2:
                        sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix));
                        break;
                    case 1:
                        sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
                        break;
                }

                if (columnIterator.hasNext()) {
                    sb.append(", ");
                }

                // 保持和官方一致 80 进行换行
                if (type == 1 || type == 2) {
                    if (sb.length() > 80) {
                        list.add(new TextElement(sb.toString()));
                        sb.setLength(0);
                        OutputUtilities.xmlIndent(sb, 1);
                    }
                } else {
                    list.add(new TextElement(sb.toString()));
                    sb.setLength(0);
                }
            }
            if (sb.length() > 0 || bracket) {
                list.add(new TextElement(sb.append(bracket ? ")" : "").toString()));
            }

            return list;
        }
    }
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type, boolean upsert) {
        List<Element> list = new ArrayList<>();

        // 只有upsert插件才会传入 IdentityAndGeneratedAlwaysColumn
        if (upsert && hasIdentityAndGeneratedAlwaysColumns(columns)) {
            XmlElement trimEle = generateTrim(bracket);

            for (IntrospectedColumn introspectedColumn : columns) {
                if (introspectedColumn.isGeneratedAlways() || introspectedColumn.isIdentity()) {
                    generateSelectiveToTrimEleTo(trimEle, introspectedColumn, prefix, type);
                } else {
                    generateSelectiveCommColumnTo(trimEle, introspectedColumn, prefix, type);
                }
            }

            return Arrays.asList(trimEle);
        } else {
            StringBuilder sb = new StringBuilder(bracket ? "(" : "");
            Iterator<IntrospectedColumn> columnIterator = columns.iterator();
            while (columnIterator.hasNext()) {
                IntrospectedColumn introspectedColumn = columnIterator.next();

                switch (type) {
                    case 3:
                        List<Element> incrementEles = PluginTools.getHook(IIncrementsPluginHook.class).incrementSetElementGenerated(introspectedColumn, prefix, false);
                        if (!incrementEles.isEmpty()) {
                            // 增量插件支持
                            if (sb.length() > 0) {
                                list.add(new TextElement(sb.toString()));
                                sb.setLength(0);
                            }
                            list.addAll(incrementEles);
                        } else {
                            sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
                            sb.append(" = ");
                            sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix));
                        }

                        break;
                    case 2:
                        sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix));
                        break;
                    case 1:
                        sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
                        break;
                }

                if (columnIterator.hasNext()) {
                    sb.append(", ");
                }

                // 保持和官方一致 80 进行换行
                if (type == 1 || type == 2) {
                    if (sb.length() > 80) {
                        list.add(new TextElement(sb.toString()));
                        sb.setLength(0);
                        OutputUtilities.xmlIndent(sb, 1);
                    }
                } else {
                    list.add(new TextElement(sb.toString()));
                    sb.setLength(0);
                }
            }
            if (sb.length() > 0 || bracket) {
                list.add(new TextElement(sb.append(bracket ? ")" : "").toString()));
            }

            return list;
        }
    }
private static List < Element > generateCommColumns ( List < IntrospectedColumn > columns , String prefix , boolean bracket , int type , boolean upsert ) { List < Element > list = new ArrayList <> ( ) ; // 只有upsert插件才会传入 IdentityAndGeneratedAlwaysColumn if ( upsert && hasIdentityAndGeneratedAlwaysColumns ( columns ) ) { XmlElement trimEle = generateTrim ( bracket ) ; for ( IntrospectedColumn introspectedColumn : columns ) { if ( introspectedColumn . isGeneratedAlways ( ) || introspectedColumn . isIdentity ( ) ) { generateSelectiveToTrimEleTo ( trimEle , introspectedColumn , prefix , type ) ; } else { generateSelectiveCommColumnTo ( trimEle , introspectedColumn , prefix , type ) ; } } return Arrays . asList ( trimEle ) ; } else { StringBuilder sb = new StringBuilder ( bracket ? "(" : "" ) ; Iterator < IntrospectedColumn > columnIterator = columns . iterator ( ) ; while ( columnIterator . hasNext ( ) ) { IntrospectedColumn introspectedColumn = columnIterator . next ( ) ; switch ( type ) { case 3 : List < Element > incrementEles = PluginTools . getHook ( IIncrementsPluginHook . class ) . incrementSetElementGenerated ( introspectedColumn , prefix , false ) ; if ( ! incrementEles . isEmpty ( ) ) { // 增量插件支持 if ( sb . length ( ) > 0 ) { list . add ( new TextElement ( sb . toString ( ) ) ) ; sb . setLength ( 0 ) ; } list . addAll ( incrementEles ) ; } else { sb . append ( MyBatis3FormattingUtilities . getEscapedColumnName ( introspectedColumn ) ) ; sb . append ( " = " ) ; sb . append ( MyBatis3FormattingUtilities . getParameterClause ( introspectedColumn , prefix ) ) ; } break ; case 2 : sb . append ( MyBatis3FormattingUtilities . getParameterClause ( introspectedColumn , prefix ) ) ; break ; case 1 : sb . append ( MyBatis3FormattingUtilities . getEscapedColumnName ( introspectedColumn ) ) ; break ; } if ( columnIterator . hasNext ( ) ) { sb . append ( ", " ) ; } // 保持和官方一致 80 进行换行 if ( type == 1 || type == 2 ) { if ( sb . length ( ) > 80 ) { list . add ( new TextElement ( sb . toString ( ) ) ) ; sb . setLength ( 0 ) ; OutputUtilities . xmlIndent ( sb , 1 ) ; } } else { list . add ( new TextElement ( sb . toString ( ) ) ) ; sb . setLength ( 0 ) ; } } if ( sb . length ( ) > 0 || bracket ) { list . add ( new TextElement ( sb . append ( bracket ? ")" : "" ) . toString ( ) ) ) ; } return list ; } }
通用遍历columns
@param columns
@param prefix
@param bracket
@param type    1:key,2:value,3:set
@param upsert
@return
通用遍历columns