src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java
@Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        // ====================================== upsert ======================================
        Method mUpsert = JavaElementGeneratorTools.generateMethod(
                METHOD_UPSERT,
                JavaVisibility.DEFAULT,
                FullyQualifiedJavaType.getIntInstance(),
                new Parameter(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable), "record")
        );
        commentGenerator.addGeneralMethodComment(mUpsert, introspectedTable);
        // interface 增加方法
        FormatTools.addMethodWithBestPosition(interfaze, mUpsert);
        logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsert方法。");

        // ====================================== upsertWithBLOBs ======================================
        // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
        if (introspectedTable.hasBLOBColumns()) {
            Method mUpsertWithBLOBs = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_WITH_BLOBS,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable), "record")
            );
            commentGenerator.addGeneralMethodComment(mUpsertWithBLOBs, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertWithBLOBs);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertWithBLOBs方法。");
        }

        // ====================================== upsertSelective ======================================
        // 找出全字段对应的Model
        FullyQualifiedJavaType fullFieldModel = introspectedTable.getRules().calculateAllFieldsClass();
        Method mUpsertSelective = JavaElementGeneratorTools.generateMethod(
                METHOD_UPSERT_SELECTIVE,
                JavaVisibility.DEFAULT,
                FullyQualifiedJavaType.getIntInstance(),
                new Parameter(fullFieldModel, "record")
        );
        commentGenerator.addGeneralMethodComment(mUpsertSelective, introspectedTable);
        // hook
        if (PluginTools.getHook(IUpsertPluginHook.class).clientUpsertSelectiveMethodGenerated(mUpsertSelective, interfaze, introspectedTable)) {
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertSelective);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertSelective方法。");
        }

        if (this.allowMultiQueries) {
            // ====================================== upsertByExample ======================================
            Method mUpsertByExample = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_BY_EXAMPLE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable), "record", "@Param(\"record\")"),
                    new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
            );
            commentGenerator.addGeneralMethodComment(mUpsertByExample, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExample);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExample方法。");

            // ====================================== upsertByExampleWithBLOBs ======================================
            // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
            if (introspectedTable.hasBLOBColumns()) {
                Method mUpsertByExampleWithBLOBs = JavaElementGeneratorTools.generateMethod(
                        METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS,
                        JavaVisibility.DEFAULT,
                        FullyQualifiedJavaType.getIntInstance(),
                        new Parameter(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable), "record", "@Param(\"record\")"),
                        new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
                );
                commentGenerator.addGeneralMethodComment(mUpsertByExampleWithBLOBs, introspectedTable);
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExampleWithBLOBs);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExampleWithBLOBs方法。");
            }

            // ====================================== upsertByExampleSelective ======================================
            Method mUpsertByExampleSelective = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_BY_EXAMPLE_SELECTIVE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(introspectedTable.getRules().calculateAllFieldsClass(), "record", "@Param(\"record\")"),
                    new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
            );
            commentGenerator.addGeneralMethodComment(mUpsertByExampleSelective, introspectedTable);
            // hook
            if (PluginTools.getHook(IUpsertPluginHook.class).clientUpsertByExampleSelectiveMethodGenerated(mUpsertByExampleSelective, interfaze, introspectedTable)) {
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExampleSelective);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExampleSelective方法。");
            }
        }

        if (this.allowBatchUpsert) {
            // ====================================== batchUpsert ======================================
            FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getNewListInstance();
            returnType.addTypeArgument(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable));
            Method mBatchUpsert = JavaElementGeneratorTools.generateMethod(
                    METHOD_BATCH_UPSERT,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(returnType, "list", "@Param(\"list\")")
            );
            commentGenerator.addGeneralMethodComment(mBatchUpsert, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsert);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsert方法。");

            // ====================================== batchUpsertWithBLOBs ======================================
            // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
            if (introspectedTable.hasBLOBColumns()) {
                returnType = FullyQualifiedJavaType.getNewListInstance();
                returnType.addTypeArgument(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable));
                Method mBatchUpsertWithBLOBs = JavaElementGeneratorTools.generateMethod(
                        METHOD_BATCH_UPSERT_WITH_BLOBS,
                        JavaVisibility.DEFAULT,
                        FullyQualifiedJavaType.getIntInstance(),
                        new Parameter(returnType, "list", "@Param(\"list\")")
                );
                commentGenerator.addGeneralMethodComment(mBatchUpsertWithBLOBs, introspectedTable);
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsertWithBLOBs);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsertWithBLOBs方法。");
            }

            // ====================================== batchUpsertSelective ======================================
            returnType = FullyQualifiedJavaType.getNewListInstance();
            returnType.addTypeArgument(fullFieldModel);
            FullyQualifiedJavaType selectiveType = new FullyQualifiedJavaType(introspectedTable.getRules().calculateAllFieldsClass().getShortName() + "." + ModelColumnPlugin.ENUM_NAME);
            Method mBatchUpsertSelective = JavaElementGeneratorTools.generateMethod(
                    METHOD_BATCH_UPSERT_SELECTIVE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(returnType, "list", "@Param(\"list\")"),
                    new Parameter(selectiveType, "selective", "@Param(\"selective\")", true)
            );
            commentGenerator.addGeneralMethodComment(mBatchUpsertSelective, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsertSelective);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsertSelective方法。");
        }

        return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
    }
@Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        // ====================================== upsert ======================================
        Method mUpsert = JavaElementGeneratorTools.generateMethod(
                METHOD_UPSERT,
                JavaVisibility.DEFAULT,
                FullyQualifiedJavaType.getIntInstance(),
                new Parameter(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable), "record")
        );
        commentGenerator.addGeneralMethodComment(mUpsert, introspectedTable);
        // interface 增加方法
        FormatTools.addMethodWithBestPosition(interfaze, mUpsert);
        logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsert方法。");

        // ====================================== upsertWithBLOBs ======================================
        // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
        if (introspectedTable.hasBLOBColumns()) {
            Method mUpsertWithBLOBs = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_WITH_BLOBS,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable), "record")
            );
            commentGenerator.addGeneralMethodComment(mUpsertWithBLOBs, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertWithBLOBs);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertWithBLOBs方法。");
        }

        // ====================================== upsertSelective ======================================
        // 找出全字段对应的Model
        FullyQualifiedJavaType fullFieldModel = introspectedTable.getRules().calculateAllFieldsClass();
        Method mUpsertSelective = JavaElementGeneratorTools.generateMethod(
                METHOD_UPSERT_SELECTIVE,
                JavaVisibility.DEFAULT,
                FullyQualifiedJavaType.getIntInstance(),
                new Parameter(fullFieldModel, "record")
        );
        commentGenerator.addGeneralMethodComment(mUpsertSelective, introspectedTable);
        // hook
        if (PluginTools.getHook(IUpsertPluginHook.class).clientUpsertSelectiveMethodGenerated(mUpsertSelective, interfaze, introspectedTable)) {
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertSelective);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertSelective方法。");
        }

        if (this.allowMultiQueries) {
            // ====================================== upsertByExample ======================================
            Method mUpsertByExample = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_BY_EXAMPLE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable), "record", "@Param(\"record\")"),
                    new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
            );
            commentGenerator.addGeneralMethodComment(mUpsertByExample, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExample);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExample方法。");

            // ====================================== upsertByExampleWithBLOBs ======================================
            // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
            if (introspectedTable.hasBLOBColumns()) {
                Method mUpsertByExampleWithBLOBs = JavaElementGeneratorTools.generateMethod(
                        METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS,
                        JavaVisibility.DEFAULT,
                        FullyQualifiedJavaType.getIntInstance(),
                        new Parameter(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable), "record", "@Param(\"record\")"),
                        new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
                );
                commentGenerator.addGeneralMethodComment(mUpsertByExampleWithBLOBs, introspectedTable);
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExampleWithBLOBs);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExampleWithBLOBs方法。");
            }

            // ====================================== upsertByExampleSelective ======================================
            Method mUpsertByExampleSelective = JavaElementGeneratorTools.generateMethod(
                    METHOD_UPSERT_BY_EXAMPLE_SELECTIVE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(introspectedTable.getRules().calculateAllFieldsClass(), "record", "@Param(\"record\")"),
                    new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")
            );
            commentGenerator.addGeneralMethodComment(mUpsertByExampleSelective, introspectedTable);
            // hook
            if (PluginTools.getHook(IUpsertPluginHook.class).clientUpsertByExampleSelectiveMethodGenerated(mUpsertByExampleSelective, interfaze, introspectedTable)) {
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mUpsertByExampleSelective);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertByExampleSelective方法。");
            }
        }

        if (this.allowBatchUpsert) {
            // ====================================== batchUpsert ======================================
            FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getNewListInstance();
            returnType.addTypeArgument(JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable));
            Method mBatchUpsert = JavaElementGeneratorTools.generateMethod(
                    METHOD_BATCH_UPSERT,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(returnType, "list", "@Param(\"list\")")
            );
            commentGenerator.addGeneralMethodComment(mBatchUpsert, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsert);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsert方法。");

            // ====================================== batchUpsertWithBLOBs ======================================
            // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准
            if (introspectedTable.hasBLOBColumns()) {
                returnType = FullyQualifiedJavaType.getNewListInstance();
                returnType.addTypeArgument(JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable));
                Method mBatchUpsertWithBLOBs = JavaElementGeneratorTools.generateMethod(
                        METHOD_BATCH_UPSERT_WITH_BLOBS,
                        JavaVisibility.DEFAULT,
                        FullyQualifiedJavaType.getIntInstance(),
                        new Parameter(returnType, "list", "@Param(\"list\")")
                );
                commentGenerator.addGeneralMethodComment(mBatchUpsertWithBLOBs, introspectedTable);
                // interface 增加方法
                FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsertWithBLOBs);
                logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsertWithBLOBs方法。");
            }

            // ====================================== batchUpsertSelective ======================================
            returnType = FullyQualifiedJavaType.getNewListInstance();
            returnType.addTypeArgument(fullFieldModel);
            FullyQualifiedJavaType selectiveType = new FullyQualifiedJavaType(introspectedTable.getRules().calculateAllFieldsClass().getShortName() + "." + ModelColumnPlugin.ENUM_NAME);
            Method mBatchUpsertSelective = JavaElementGeneratorTools.generateMethod(
                    METHOD_BATCH_UPSERT_SELECTIVE,
                    JavaVisibility.DEFAULT,
                    FullyQualifiedJavaType.getIntInstance(),
                    new Parameter(returnType, "list", "@Param(\"list\")"),
                    new Parameter(selectiveType, "selective", "@Param(\"selective\")", true)
            );
            commentGenerator.addGeneralMethodComment(mBatchUpsertSelective, introspectedTable);
            // interface 增加方法
            FormatTools.addMethodWithBestPosition(interfaze, mBatchUpsertSelective);
            logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加batchUpsertSelective方法。");
        }

        return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
    }
@ Override public boolean clientGenerated ( Interface interfaze , TopLevelClass topLevelClass , IntrospectedTable introspectedTable ) { // ====================================== upsert ====================================== Method mUpsert = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( JavaElementGeneratorTools . getModelTypeWithoutBLOBs ( introspectedTable ) , "record" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsert , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsert ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert 方 法 " ; // ====================================== upsertWithBLOBs ====================================== // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准 if ( introspectedTable . hasBLOBColumns ( ) ) { Method mUpsertWithBLOBs = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT_WITH_BLOBS , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( JavaElementGeneratorTools . getModelTypeWithBLOBs ( introspectedTable ) , "record" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsertWithBLOBs , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsertWithBLOBs ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert W i h LOBs方法。"); } // ====================================== upsertSelective ====================================== // 找出全字段对应的Model FullyQualifiedJavaType fullFieldModel = introspectedTable . getRules ( ) . calculateAllFieldsClass ( ) ; Method mUpsertSelective = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT_SELECTIVE , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( fullFieldModel , "record" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsertSelective , introspectedTable ) ; // hook if ( PluginTools . getHook ( IUpsertPluginHook . class ) . clientUpsertSelectiveMethodGenerated ( mUpsertSelective , interfaze , introspectedTable ) ) { // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsertSelective ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert S e e tive方法。"); } if ( this . allowMultiQueries ) { // ====================================== upsertByExample ====================================== Method mUpsertByExample = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT_BY_EXAMPLE , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( JavaElementGeneratorTools . getModelTypeWithoutBLOBs ( introspectedTable ) , "record" , "@Param(\"record\")" ) , new Parameter ( new FullyQualifiedJavaType ( introspectedTable . getExampleType ( ) ) , "example" , "@Param(\"example\")" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsertByExample , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsertByExample ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert B y x mple方法。"); // ====================================== upsertByExampleWithBLOBs ====================================== // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准 if ( introspectedTable . hasBLOBColumns ( ) ) { Method mUpsertByExampleWithBLOBs = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( JavaElementGeneratorTools . getModelTypeWithBLOBs ( introspectedTable ) , "record" , "@Param(\"record\")" ) , new Parameter ( new FullyQualifiedJavaType ( introspectedTable . getExampleType ( ) ) , "example" , "@Param(\"example\")" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsertByExampleWithBLOBs , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsertByExampleWithBLOBs ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert B y x mpleWithBLOBs方法。"); } // ====================================== upsertByExampleSelective ====================================== Method mUpsertByExampleSelective = JavaElementGeneratorTools . generateMethod ( METHOD_UPSERT_BY_EXAMPLE_SELECTIVE , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( introspectedTable . getRules ( ) . calculateAllFieldsClass ( ) , "record" , "@Param(\"record\")" ) , new Parameter ( new FullyQualifiedJavaType ( introspectedTable . getExampleType ( ) ) , "example" , "@Param(\"example\")" ) ) ; commentGenerator . addGeneralMethodComment ( mUpsertByExampleSelective , introspectedTable ) ; // hook if ( PluginTools . getHook ( IUpsertPluginHook . class ) . clientUpsertByExampleSelectiveMethodGenerated ( mUpsertByExampleSelective , interfaze , introspectedTable ) ) { // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mUpsertByExampleSelective ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加upsert B y x mpleSelective方法。"); } } if ( this . allowBatchUpsert ) { // ====================================== batchUpsert ====================================== FullyQualifiedJavaType returnType = FullyQualifiedJavaType . getNewListInstance ( ) ; returnType . addTypeArgument ( JavaElementGeneratorTools . getModelTypeWithoutBLOBs ( introspectedTable ) ) ; Method mBatchUpsert = JavaElementGeneratorTools . generateMethod ( METHOD_BATCH_UPSERT , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( returnType , "list" , "@Param(\"list\")" ) ) ; commentGenerator . addGeneralMethodComment ( mBatchUpsert , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mBatchUpsert ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加batchU p s r 方法。"); // ====================================== batchUpsertWithBLOBs ====================================== // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准 if ( introspectedTable . hasBLOBColumns ( ) ) { returnType = FullyQualifiedJavaType . getNewListInstance ( ) ; returnType . addTypeArgument ( JavaElementGeneratorTools . getModelTypeWithBLOBs ( introspectedTable ) ) ; Method mBatchUpsertWithBLOBs = JavaElementGeneratorTools . generateMethod ( METHOD_BATCH_UPSERT_WITH_BLOBS , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( returnType , "list" , "@Param(\"list\")" ) ) ; commentGenerator . addGeneralMethodComment ( mBatchUpsertWithBLOBs , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mBatchUpsertWithBLOBs ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加batchU p s r WithBLOBs方法。"); } // ====================================== batchUpsertSelective ====================================== returnType = FullyQualifiedJavaType . getNewListInstance ( ) ; returnType . addTypeArgument ( fullFieldModel ) ; FullyQualifiedJavaType selectiveType = new FullyQualifiedJavaType ( introspectedTable . getRules ( ) . calculateAllFieldsClass ( ) . getShortName ( ) + "." + ModelColumnPlugin . ENUM_NAME ) ; Method mBatchUpsertSelective = JavaElementGeneratorTools . generateMethod ( METHOD_BATCH_UPSERT_SELECTIVE , JavaVisibility . DEFAULT , FullyQualifiedJavaType . getIntInstance ( ) , new Parameter ( returnType , "list" , "@Param(\"list\")" ) , new Parameter ( selectiveType , "selective" , "@Param(\"selective\")" , true ) ) ; commentGenerator . addGeneralMethodComment ( mBatchUpsertSelective , introspectedTable ) ; // interface 增加方法 FormatTools . addMethodWithBestPosition ( interfaze , mBatchUpsertSelective ) ; logger . debug ( "itfsw(存在即更新插件):" + interfaze.g t ype().get S hortNam e ( )  + "增加batchU p s r Selective方法。"); } return super . clientGenerated ( interfaze , topLevelClass , introspectedTable ) ; }
Java Client Methods 生成
具体执行顺序 http://www.mybatis.org/generator/reference/pluggingIn.html
@param interfaze
@param topLevelClass
@param introspectedTable
@return
Java Client Methods 生成 具体执行顺序 http : // www . mybatis . org / generator / reference / pluggingIn . html